2013-04-19 2 views
0

많은 아이콘이 그려진 그리드 레이아웃 JPanel이 있습니다. 지도가 변경되어 플레이어가 움직 인 후에 아이콘을 변경해야합니다. 여기 나와있는 방법은 다음과 같습니다.Java GUI - 모든 구성 요소를 제거하고 다시 그립니다.

public void initGridIcons(JPanel pnl, String map) { 
    pnl.removeAll(); 
    char[] tiles = map.toCharArray(); 
    for (char ch : tiles) { 
     JLabel label = new JLabel(""); 
     String icon = ""; 
     switch (ch) { // lots of cases irrelevant to problem 
     } 
     label.setIcon(new ImageIcon(ClientGUI.class 
       .getResource("/resources/" + icon))); 
     pnl.add(label); 
    } 
} 

이것은 플레이어와지도를 올바르게 그립니다. 그러나 매 턴마다 변경되지 않습니다.

필자는 반복자 카운터 (짝수의 변경)와 함께이 방법을 사용하여 다른 코드가 아니 었는지 확인하려고 시도했지만 작동하지 않으므로 이것이 확실합니다.

답변

3

JFrame이 가시화되는 응용 프로그램의 컨테이너 전에 처음 작동 할 수 있지만 revalidate에 호출 repaint는 실행시에 일을 얻기 위해 JPanel에 필요하다.

for (char ch : tiles) { 
    ... 
    pnl.add(label); 
} 

pnl.revalidate(); 
pnl.repaint(); 

설정하는 Icons의 수가 고정 된 수의 경우

은 다음 JLabel#setIcon은 단순히 아이콘을 변경하는 호출 할 수 있습니다.

+0

pnl.revalidate() 및 pnl.repaint()가 도움이되었습니다. 감사합니다. – njl

관련 문제