2013-07-02 29 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