import javax.swing.*;
class Frame extends JFrame{
Frame() {
JFrame j = new JFrame();
j.setBounds(100, 200, 120, 120);
j.setTitle("null");
j.setVisible(true);
j.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
public class test001 {
public static void main (String Args[]){
Frame f = new Frame();
System.out.print("Visible = True");
f.setVisible(false);
System.out.print("Visible = false");
}
}
在setVisible(false)命令之后。 JFrame窗口仍显示在我的桌面上。 我该如何解决这个问题?
答案 0 :(得分:5)
您正在构造函数中创建另一个JFrame
。假设您想要的是Frame
类不可见,请执行以下操作:
class Frame extends JFrame {
Frame() {
setBounds(100, 200, 120, 120);
setTitle("null");
setVisible(true);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
}
public class test001 {
public static void main(String Args[]) {
Frame f = new Frame();
System.out.print("Visible = True");
f.setVisible(false);
System.out.print("Visible = false");
}
}
答案 1 :(得分:1)
问题是你的main方法使用了不同的构造函数JFrame。 Frame构造函数创建新的JFrame实例(使用新的JFrame)。当你调用f.setVisible(false)时,它会转到你的框架,但不会创建JFrame。
答案 2 :(得分:0)
这里的问题是你的“Frame”类实现了一个新的JFrame。在Frame上调用setVisible不会影响正在显示的JFrame。
您可以通过使用JFrame实例或仅仅子类化来修复它。不要两者兼顾。
答案 3 :(得分:0)
除了你所指的两个不同的框架(这是回答https://stackoverflow.com/a/1450488/1326149的问题),你应该在EVT线程中做所有的图形操作(因为你的程序即使它很适合你也可能不是便携式到不同的平台)。