Java 在不打开新框架的情况下更改Jframe内容

Java 在不打开新框架的情况下更改Jframe内容,java,swing,jframe,window,Java,Swing,Jframe,Window,我有一个打开Jframe的程序。在这个Jframe中,我有一个按钮,可以打开另一个也有Jframe的类。有没有办法在第一个框架中打开新类和新gui,并在第一个框架中删除现有内容 这是第一节课: public class FirstFrame { public FirstFrame() { JFrame frame = new JFrame(); frame.setTitle("Title"); frame.setLayout(new BorderLayout());

我有一个打开Jframe的程序。在这个Jframe中,我有一个按钮,可以打开另一个也有Jframe的类。有没有办法在第一个框架中打开新类和新gui,并在第一个框架中删除现有内容

这是第一节课:

public class FirstFrame {

public FirstFrame() {

JFrame frame = new JFrame();
    frame.setTitle("Title");
    frame.setLayout(new BorderLayout());
    frame.setSize(500,350);
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    // Code for a button, that has an actionlistener wich opens the next
    //class

    frame.setVisible(true);
    frame.setResizable(false);
     }



    public static void main(String[] args){


    new FirstFrame();

  }
}
第二节课几乎和这节课一样。这两个框架之间的区别在于它们的内容不同。 当我运行程序时,一切正常,但我有两个窗口。此外,它在任务管理器中表示,这两个帧作为两个不同的程序运行


有没有一种方法可以改变内容,甚至是框架的名称,而不必处理两个不同的框架?

您可以更改
JFrame
的内容窗格。假设有两个
JComponent
s称为
a
b
。初始化帧:

JFrame frame = new JFrame();
frame.setContentPane(a);
那你就可以打电话了

frame.setContentPane(b);
更改内容。您可能还需要调用
revalidate
repaint
来刷新帧

在下面的示例中,按下按钮将
JFrame
的内容从单个
JButton a
更改为
JLabel b
。您可以使用任何
JComponent
,例如包含多个
JComponent
JPanel

public static void main(String[] args) {
    final JFrame frame = new JFrame();
    frame.setTitle("Title");
    frame.setSize(500, 350);
    frame.setResizable(false);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JButton a = new JButton("button A");
    frame.setContentPane(a);

    frame.setVisible(true); // calling setVisible after content pane has been set to refresh a frame

    a.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            JComponent b = new JLabel("label B");
            frame.setContentPane(b);
            frame.revalidate();
        }
    });
}
使用如中所示的。当然,该建议假定内容放在一组
JComponent
对象中(通常是
JPanel
)。