setVisible(false)时JFrame不隐藏

时间:2009-09-20 06:56:37

标签: java jframe

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窗口仍显示在我的桌面上。 我该如何解决这个问题?

4 个答案:

答案 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线程中做所有的图形操作(因为你的程序即使它很适合你也可能不是便携式到不同的平台)。