2012-06-19 3 views
3

다른 JButton의와 JPanel의에서의 JButton를 대체하지만, 패션의 이상한 종류의 일을하지 않는 것 방법 :내가 자바 코드의 다음 조각을 시도하고

JFrame myFrame = new JFrame("Test Frame"); 
myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
JFrame.setLayout(new GridLayout()); 

JPanel myPanel = new JPanel(); 
myPanel.setLayout(new BorderLayout()); 
myFrame.add(myPanel); 

JButton firstButton = new JButton(); 
myPanel.add(firstButton); 

JButton secondButton = new JButton(); 
myPanel.remove(firstButton); 
myPanel.add(secondButton); 
myFrame.repaint(); 

내가 잘못 뭐하는 거지 ?

+0

어떻게 될 것으로 예상됩니까? myPrame을 myFrame에 추가하지 않고 동일한 실행 파일의 EDT에서'add','remove','add'를 호출하면 첫 번째 버튼이 표시되지 않습니다. – Robin

+0

죄송합니다. , 위의 코드를 입력하는 동안. 그것을 이미 고려하십시오. – NlightNFotis

답변

3

JFrame에 대한 (myFrame.repaint();)를 칠하지 않습니다, 당신은 당신이 (가) JButton 인덱스를 찾기 위해 getComponents()을 사용할 수 (re)validaterepaintJPanel과 가까운 컨테이너가 귀하의 경우

JButton secondButton = new JButton(); 
myPanel.remove(firstButton); 
myPanel.add(secondButton); 
myPanel.revalidate(); 
myPanel.repaint(); 
+0

변경 사항이 발생한 'JPanel'에 대한 revalidate()/repaint()는 열쇠입니다 :-) +1은 –

+0

고맙습니다. revalidate()와 같아서 repaint()가 필요한 것 전부였습니다. – NlightNFotis

+0

@NlightNfotis 당신을 도울 수있어서 기쁩니다 – mKorbel

2

을에해야하고, addComponent(Component component, int index) 이전 위치에 이전 위치를 추가하려면 이후에 대체하려는 위치를 제거 할 수 있습니다.

+0

+1이 아이디어는 유용 할 수 있습니다. GridLayout – mKorbel

관련 문제