傍晚的女士們,先生們,聆聽/處理JPanel事件
我有一個Java Swing的問題,我無法解決,也許你可以幫助我。這是它:
- 我有一個JFrame使用BorderLayout和許多JPanel。
- 每當我需要建立一個新的屏幕(即從主菜單,當點擊搜索按鈕,進入搜索菜單),我只是刪除位於中心的組件(JPanel),並把新的屏幕(新的JPanel)在中心。
- 這樣,每次我想放置一個新的屏幕時,我都不會調用所有的頁眉和頁腳對象。
除了這個小問題,一切都正常工作:我想每次觸發一些方法,我建立一個新的JPanel或改回現有的JPanel(一般來說,每當JPanel出現時)。爲了做到這一點,我試圖實現ComponentListener的componentShown(ComponentEvent e)方法,並將一個ComponentListener添加到我放在JFrame中心的JPanel中,但它不起作用。在此之後,我做了一些研究,發現這個componentShown(@ComponentListener)方法只在JPanel的可見性被改變時(從不可見到可見或相反)才起作用。不幸的是,我沒有改變JPanel的可見性,只是用另一個替換它:刪除當前的一個,並添加新的。下面的代碼說明了我如何替換JPanel。
// Get the JPanel located in the center of our JFrame
JPanel currentView = (JPanel) myFrame.getContentPane().getComponent(2);
if (currentView != null)
{
// Remove it from the JPanel
myFrame.getContentPane().remove(currentView);
}
// Add the new JPanel
myFrame.getContentPane().add(otherView, BorderLayout.CENTER);
// Pack the JFrame and show it
myFrame.pack();
所以這裏是我的。如果你能幫助我,我將不勝感激。
你能做什麼,而不是添加/刪除'JPanel's自己是在你的'CENTER'使用一個''JPanel' contentPane'與['CardLayout'](http://docs.oracle.com/javase/7/docs/api/java/awt/CardLayout.html)。 [如何使用'CardLayout'](http://docs.oracle.com/javase/tutorial/uiswing/layout/card.html)。 – Jeffrey 2012-04-07 02:18:45
@傑弗裏,謝謝你的快速回復。你所說的是好的和合理的,但我正在處理的是一個小組工作。我們現在有一種模式,在建議改變我們的模式(BorderLayout - > CardLayout)之前,我想 - 至少 - 嘗試用當前模式提出解決方案。 – 629 2012-04-07 02:26:35
僅僅因爲您使用BorderLayout並不意味着您不能使用CardLayout,因爲它們不是互斥的。 BorderLayout.CENTER面板可以是持卡人,即使用CardLayout的JPanel。 – 2012-04-07 02:53:09