如何在JAVA中关闭现有框架并打开新框架

如何在JAVA中关闭现有框架并打开新框架,java,Java,我想打开一个新的框架来显示更多的细节,让我像一个新的页面一样从一个新窗口开始 这是我的密码: public class OBA { public static void main(String[] args) { JFrame f = new JFrame("OBA"); f.setSize(1366, 768); f.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); f.s

我想打开一个新的框架来显示更多的细节,让我像一个新的页面一样从一个新窗口开始

这是我的密码:

public class OBA {

    public static void main(String[] args) {

        JFrame f = new JFrame("OBA");
        f.setSize(1366, 768);
        f.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
        f.setLayout(null);
        f.setVisible(true);

        JLabel l1 = null;
        JLabel l2 = null;
        JLabel l3 = null;
        l1 = new JLabel("Welcome");
        l1.setBounds(625, 100, 100, 100);
        l1.setFont(new Font("Courier New", Font.BOLD, 22));
        l1.setForeground(Color.BLACK);
        l2 = new JLabel("To", JLabel.CENTER);
        l2.setBounds(625, 100, 100, 150);
        l2.setFont(new Font("Courier New", Font.BOLD, 22));
        l2.setForeground(Color.BLACK);
        l3 = new JLabel("OBA", JLabel.CENTER);
        l3.setBounds(623, 100, 100, 200);
        l3.setFont(new Font("Courier New", Font.BOLD, 22));
        l3.setForeground(Color.BLACK);
        f.add(l1);
        f.add(l2);
        f.add(l3);
    }
}

您创建了JFrame,
f
,因此您知道如何创建JFrame。要永久关闭该框架,可以调用
f.dispose()
;如果只想隐藏它,请调用
f.setVisible(false)
。要打开新框架,请执行与创建
f
类似的操作

我不知道你为什么要这样做,但如果(正如我解释你的问题)你想关闭当前窗口并立即创建一个新窗口,在很多情况下,有一个更简单的方法。代替处理一个JFrame并创建另一个JFrame,您可以保留现有的JFrame并删除其中已有的任何内容,例如通过连续调用
f.remove()
,每个要删除的组件对应一个JFrame。如果您将组件放在
LayoutManager
中而不是直接放在框架中,则可以使用
f.setLayout()
将另一个
LayoutManager
放在框架中,然后一次性交换所有组件,这可能会更容易

有关JFrame的更多信息,请参阅Oracle

编辑(回应评论):如果要在更改显示内容之前等待,则需要使用导致延迟的方法
java.lang.thread
有一个静态方法
sleep()
,该方法正是这样做的;要等待五秒钟,可以使用
Thread.sleep(5000)(因为它接受毫秒)。但是,如果中断正在运行
sleep()
的线程,此方法可能会引发异常。因此,您应该将其包装在一个try块中:

try {
    Thread.sleep(5000);
} catch(InterruptedException ex) {
    // Your thread was interrupted (maybe the user quit the program?)
    // Handle that here.
}
f.remove(/* The element to remove goes here. */);
// Etc...
当然,由于这会使线程暂停五秒钟,因此在处理诸如用户输入之类的事情的线程中不应调用
sleep()
,这可能发生在这五秒钟内

甲骨文对此也有自己的看法


这与最初的问题的主题有所不同,但是Java中的线程(一般来说)有很多让人困惑的小细节。如果您需要有关
sleep()
或线程的更多帮助,您可能需要问一个新问题,或者查找与您的问题相关的现有问题。

您好,欢迎来到Stack Overflow。你能告诉我们到目前为止你都做了些什么吗?很好,你已经提供了你的代码,但是最好看看你试图解决什么问题,以及为什么它不起作用:)我如何使用f.remove(),因为我希望我的文本等待5秒钟,然后删除所有内容