繁体   English   中英

更改Jframe内容而无需打开新框架

[英]Change Jframe content without opening a new frame

我有一个打开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的内容窗格。 假设您有两个名为ab JComponent 您初始化框架:

JFrame frame = new JFrame();
frame.setContentPane(a);

那你就可以打电话

frame.setContentPane(b);

更改内容。 您可能还需要调用revalidaterepaint以刷新框架。

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

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();
        }
    });
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM