我在这里使用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,当我们点击不同的按钮时,其内容会发生变化。我怎样才能做到这一点?
答案 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所做的事。这就是使用可以更改不同内容组的布局管理器。