我想打开一个新框架以显示更多详细信息,并希望我在新的窗口(例如新的新鲜页面)上开始
这是我的代码:
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);
}
}
答案 0 :(得分:0)
您创建了一个JFrame f
,因此您知道如何创建JFrame。要永久关闭该框架,可以调用f.dispose()
;如果您只想隐藏它,请致电f.setVisible(false)
。要打开新框架,请执行与创建f
相同的操作。
我不确定您为什么要这样做,但是如果(如我所解释的那样)您要关闭当前窗口并立即创建一个新窗口,在许多情况下,有一种更简单的方法。代替部署一个JFrame并创建另一个JFrame,您可以保留现有JFrame并删除其中已有的JFrame,例如连续调用f.remove()
,每个要删除的组件一个。如果您将组件放在LayoutManager
中而不是直接放入框架中,则可以将另一个LayoutManager
与f.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()
或线程方面的更多帮助,则可能要问一个新问题,或者寻找与您的问题相关的现有问题。