当我们点击不同的按钮时,其内容会发生变化的JFrame

时间:2013-03-26 08:03:20

标签: java swing jframe cardlayout

我在这里使用Java's Swing制作UI应用程序。我有一个创建了一个JFrame,带有一些按钮。当我点击这个按钮时,我想要一个在这个地方有一些不同内容的新JFrame。但是,我不想在这里加载新的JFrame。

我知道一种方法是在第一个JFrame中按钮的actionPerformed(ActionEvent obj)方法中将第二个JFrame的可见性设置为True。但它再次加载一个新的JFrame,我不希望这样。

public class FirstUI extends JFrame {
    JButton but1;

    public FirstUI(){
        but1= new JButton("Click here");
        add(but1);

    XYZ obj= new XYZ():
    but1.addActionListener(obj);
    }

    public class XYZ implements ActionListener{
        public void actionPerformed(ActionEvent obj1){

             // WHAT TO DO HERE  
        } 
    }
}

我只需要一个JFrame,当我们点击不同的按钮时,其内容会发生变化。我怎样才能做到这一点?

4 个答案:

答案 0 :(得分:11)

查看CardLayout,这样可以切换框架的内容:

  

CardLayout对象是容器的布局管理器。它将容器中的每个组件视为卡片。一次只能看到一张卡片,而容器则充当一叠卡片。添加到CardLayout对象的第一个组件是首次显示容器时的可见组件。

有关示例,请参阅How to Use CardLayout

答案 1 :(得分:3)

您还可以在运行时动态操作JFrame的内容。您可以使用add(...)remove(...)removeAll(...)方法在显示框架之前添加和删除内容。完成后,您需要调用已修改容器的revalidate()repaint()方法,以使所有内容稳定下来并正确显示。

但是我认为正确的解决方案取决于您尝试实施的实际概念。如果要添加或删除几个GUI元素以强调功能,那么正确的方法是按照我的概述操作容器。但是如果你想要稍微不同的GUI取决于系统状态(不超过2-3)那么CardLayout将是一个更合适的选择

答案 2 :(得分:0)

您可以设置父类false的可见性。

然后,您一次只能获得一个包含所需内容的帧。

你必须在Button的click事件中创建框架的静态对象和setVisible(fase)。

实施例

public class demo  {
static JFrame jf;
public static void main(String a[])
{
    JButton b=new JButton("OK");
    JPanel jp=new JPanel();
    jf=new JFrame();
    jf.setVisible(true);
    jf.setSize(200,200);
    jf.add(jp);
    jp.add(b);

    b.addActionListener( new ActionListener(){
    public void actionPerformed(ActionEvent e)
    {
     jf.setVisible(false);
     JFrame f= new JFrame();
     f.setSize(200,200);
     f.setVisible(true);
    }
    });
}

}

它会帮助你。

你知道了吗?

答案 3 :(得分:0)

一种方法是更改​​JFrame的内容窗格。这基本上是一个JPanel。你可以通过frame.setContentPane( <your new panel> );来做到这一点 第二种方法是做@Peter Lang所做的事。这就是使用可以更改不同内容组的布局管理器。