2011-10-28 30 views
2

所以我正在使用swing框架開發GUI應用程序。簡而言之,我有3個JPanel作爲我的應用程序的不同視圖。現在的問題是,無論我添加JPanel到我的JFrame的順序,只有當我切換到該視圖時,JPanel會添加調整大小。爲什麼只添加到JFrame的最後一個JPanel調整大小?

的代碼一些相關位:

當創建窗口,我首先創建每個單獨的JPanel,並把它添加到JFrame:

JPanel newPanel = new SomeClassExtendingJPanel(); 
this.jframe.add(newPanel); 

接下來,每當我的意見的應用程序之間切換我隱藏當前處於活動狀態的面板:

jframe.validate(); 
jframe.repaint(); 
oldPanel.setVisible(false); 

然後激活要顯示面板:

jframe.validate(); 
jframe.repaint(); 
newPanel.setVisible(true); 

有誰知道什麼可能是錯的?

回答

2

要調整每個交換的JFrame的大小,您可以調用其上的pack(),但是這是一直有GUI調整的kludgy。更好的解決方案是使用Swing用於交換視圖的機制 - CardLayout。這將使容器的尺寸達到所需的最大尺寸,以充分顯示所有「卡」組件。

查看CardLayout tutorialCardLayout API瞭解更多。

+0

應該在哪裏layoutmanager是?如果我說創建一個新JPanel作爲所有其他JPanel的容器,那麼當JFrame調整大小時,實際上JPanel會調整大小嗎? – Bartvbl

+0

它的工作..謝謝。並可能搖擺燃燒。 – Bartvbl

+0

有關如何組合佈局的想法,請參閱[嵌套佈局示例](http://stackoverflow.com/questions/5621338/about-swing-and-jtable/5630271#5630271)。 –

2

的JFrame的contentPane中已經實施BorderLayout默認情況下,有可能只有一個JComponents向他提出一個Area

你必須改變使用LayoutManager或者換句話說JPanels其他Areas