2012-06-19 36 views
3

我想下面這段Java代碼代替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

你認爲會發生什麼?您不會將myPanel添加到myFrame中,如果您在同一個可運行的程序中調用EDT中的add,remove,add,您將永遠看不到第一個按鈕 – Robin

+0

對不起,我錯過了,而我正在輸入上面的代碼。考慮它已經在那裏。 – NlightNFotis

回答

3

不重繪爲JFramemyFrame.repaint();),你必須(re)validaterepaintJPanel最近的容器是在你的情況

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

對上述發生變化的'JPanel'重新驗證()/ repaint()是關鍵:-) +1這個 –

+0

Thanx爲你的答案。看起來像revalidate(),然後repaint()是我所需要的。 – NlightNFotis

+0

@NlightNfotis很樂意幫助您 – mKorbel

2

你可以爲了找到的JButton指數使用getComponents(),和addComponent(Component component, int index)添加舊的,然後你可以刪除你想要替換的。

+0

+1這個想法可能是有用的,不確定是否對於GridLayout – mKorbel