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

我在这里使用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,当我们点击不同的按钮时,其内容会发生变化。 我怎样才能做到这一点?

看看CardLayout ,这将允许切换框架的内容:

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

有关示例,请参见如何使用CardLayout 。

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

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

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

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

您必须在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); } }); } 

}

它会帮助你。

你明白了吗?

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