2014-05-10 3 views
0

버튼을 클릭 할 때마다 wordLabel이라는 ArrayList<JLabel>이라는 이름이 지워지고 ArrayList으로 업데이트되도록 버튼 ActionListener을 작성합니다. 아쉽게도 이전 ArrayList은 올바르게 지워지지 않고 새 것으로 겹쳐서 표시됩니다.JLabel을 ActionListener로 업데이트하는 방법

예를 들어, 클릭하기 전에 : SPRING; 클릭 후 (대신 -----의) SPRING-----

내 코드 :

private class StartListener implements ActionListener{ 

    @Override 
    public void actionPerformed(ActionEvent event) { 
     startPanel.wordLabel.clear(); 
     for (int i = 0; i <= word.length() - 1; i++) { 
      startPanel.wordLabel.add(new JLabel("_")); 
      startPanel.add(startPanel.wordLabel.get(i)); 
     } 
     startPanel.revalidate(); 
     startPanel.repaint(); 

    } 
} 

사람이 도와 드릴까요? 미리 감사드립니다.

+0

새로운 JLabels을 추가 왜 startPanel.wordLabel.repaint() – Troveldom

+0

시도 ? 왜 이전의 텍스트를 변경하지? 새 레이블 만들기 == 새 객체 만들기 == 오버 헤드. 이것은 어쨌든 목적은 무엇입니까? 그리고 동시에 문제가 될 수 있습니다. 'actionPerformed'는 특정 스레드 (EDT)에서 처리됩니다. 변수가'volatile'으로 선언되지 않으면 변수의 사본이 해당 스레드에 대한 스레드 로컬 저장소에 만들어집니다 (사용자의 jvm에 따라 다름). 어쨌든, 그것은 마치 당신이 충분한 코드를 보여주지 않는 것 같습니다. (리스트를 지우고 그 위에 추가, 그것 위로 스택해야한다.) –

+0

@VinceEmigh 체크해봤을 때, 'ArrayList' 자체는 지워졌지만 프레임에 이전 것을 계속 표시한다. –

답변

0

startPanel을 지우지 않으면 모든 이전 JLabel과 새 문자도 포함됩니다. 이 작업을 추가하여 해당 작업을 수행 할 수 있습니다

startPanel.removeAll(); 
+0

제안을 시도했으나 배열이 지워졌지만 새 배열은 이전 위치의 텍스트 만 교체합니다 하나는 여전히 프레임에 있습니다. 이와 같이 : 'SPRING'을 클릭하기 전에'SPRING'을 클릭하고, 클릭 한 후에 텍스트를 인쇄 할 때는'-----' –

0

을 당신이하고 싶은 모든 당신이해야 할 당신의 ArrayList를 명확 경우 :

arrayListName.clear(); 
+0

입니다. 위의 코드에서 그랬지만 이전의'ArrayList' 아직 프레임에있다. –

관련 문제