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

时间:2018-10-17 18:27:33

标签: 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.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);
    }
}

1 个答案:

答案 0 :(得分:0)

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

我不确定您为什么要这样做,但是如果(如我所解释的那样)您要关闭当前窗口并立即创建一个新窗口,在许多情况下,有一种更简单的方法。代替部署一个JFrame并创建另一个JFrame,您可以保留现有JFrame并删除其中已有的JFrame,例如连续调用f.remove(),每个要删除的组件一个。如果您将组件放在LayoutManager中而不是直接放入框架中,则可以将另一个LayoutManagerf.setLayout()一起放入,并一次性交换所有内容,这可能会更容易。

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

编辑(针对评论):如果要在更改显示内容之前等待,则需要使用会导致延迟的方法。 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()

Oracle对此也有documentation

这与原始问题已经成为一个不同的主题,但是Java(以及一般而言)中的线程具有许多使人绊倒的小巧之处。如果您需要sleep()或线程方面的更多帮助,则可能要问一个新问题,或者寻找与您的问题相关的现有问题。

相关问题