2013-07-02 32 views
0

我有三個類一個JFrame類和兩個JPanel類。我已經加入了INTIAL的JPanel到JFrame像這樣如何切換不同類的JPanel

public JFrame() { 

    add(new 1stPanel(this)); 


    setVisible(true); 
    setLayout(null); 
} 

然後我想在按鈕中使用一個ActionListener在第1小組將其刪除,並添加其他面板這是另一個類。我試圖給每個類變量和使用簡單的remove(),並添加()這樣的:

private 1stpanel 1p; 
private 2ndpanel 2p; 

btn.addActionListener((new ActionListener(){ 
     public void actionPerformed(ActionEvent e) 
      { 
      remove(1p); 
      add(2p); 
      validate(); 
      repaint(); 
      } 
     })); 

不工作我已經使用JFrame.remove(1P),也試過,但還是不行無論是。當我removeAll()它擺脫了1stpanel JPanel中的所有內容,但是我無法添加第二面板。 我可以使用什麼代碼取出第一個面板或1stpanel類,並添加另一個類中的第二個面板。 感謝您的幫助提前。

+0

嘗試對'yourframe.getContentPane()'' – johnchen902

+1

'setLayout(null);''不要這樣做。 Java GUI可能需要在多種平臺上工作,使用不同的屏幕分辨率和使用不同的PLAF。因此,它們不利於組件的準確放置。要爲可靠的GUI組織組件,請使用佈局管理器或它們的組合,以及用於空白區域的佈局填充和邊框。 –

回答

4

嘗試使用CardLayout和交換卡(面板)。可能是你的問題是創建add(new 1stPanel(this))。你添加一個局部變量,然後使用類的字段。

2

您的代碼行

 remove(1p); 
     add(2p); 
     validate(); 
     repaint(); 

你是動作監聽器裏調用被稱爲這個對象,我懷疑是JPanel的本身。如果它是在擴展JFrame的類中定義一個方法,請將這些代碼放在該方法內,並在動作事件中調用該方法。

+0

剛試過 'public void switchpanels(){ remove(1p); add(2p); validate(); repaint(); } btn.addActionListener((新的ActionListener(){ \t \t \t公共無效的actionPerformed(ActionEvent的E) \t \t \t \t { \t \t \t \t switchpanels(); \t \t \t \t \t \t \t \t} \t \t}));' – user2343993

+0

什麼是結果。順便說一下,switchpanels()方法需要放在擴展JFrame的類中。 – pundit

+0

噢好吧我會把開關面板的方法,看看會發生什麼 – user2343993