2012-06-11 118 views
0

我正在为我的应用程序构建简单的GUI。我有几个JPanels。我想显示它们取决于通过单击JButton执行的操作。我如何禁用一个JPanel并启用另一个JPanel?单击按钮后更改JPanel

几个细节。我有一个JFrame的课程,我正在创建gui。我在哪里有按钮和一些文字。点击其中一个按钮应该更改视图在此JFrame的

我的按钮定义

JButton btnStart = new JButton("Start"); 
    btnStart.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 

     } 
    }); 
    btnStart.setBounds(10, 11, 110, 23); 
    contentPane.add(btnStart); 

//编辑

我发现这个问题。按钮处于静态方式

回答

3

就这么简单:

jframe.setContentPane(your_new_panel); 
jframe.invalidate(); 
jframe.validate(); 
+0

我怎样才能得到jframe?这是内部类,因此无法访问它 – Fixus

+0

如果您正在扩展JFrame,则您已有权访问方法setContentPane。 –

+0

你的代码结构如何?你是否继承了JFrame? – 2012-06-11 16:45:50

4
  1. 您可能想要使用CardLayout
  2. 或者你可以简单的删除oldpanel并添加新的面板:

contentPane.remove(oldPanel); 
contentPane.add(newPanel); 
+0

同样的问题上面。如何从内部类获取contentPane? – Fixus

+1

@Fixus:你不需要获取contentPane。你只需要引用任何正在处理cardlayout-using组件的类,然后调用你给班上的任何公共方法,以便交换卡片。对于Suraj:您的CardLayout rec比交换组件要好,因为CardLayout会考虑组件大小。你也不必担心调用'revalidate()'和'repaint()'(你似乎忘了你的答案)。 –

+0

如果它的JFrame,你可以使用contentPane:“frame.getContentPane()” –