2
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

4 回答 4

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");
   }
}
于 2009-09-20T07:06:49.357 回答
1

问题是您的主要方法使用与构造函数不同的 JFrame。您的 Frame 构造函数创建新的 JFrame 实例(使用新的 JFrame)。当您调用 f.setVisible(false) 时,它会转到您的框架,但不会转到创建的 JFrame。

于 2009-09-20T07:08:58.810 回答
0

这里的问题是您的“Frame”类实例化了一个新的 JFrame。在 Frame 上调用 setVisible 不会影响正在显示的 JFrame。

您可以通过仅使用 JFrame 实例或仅使用子类来修复它。不要两者都做。

于 2009-09-20T07:11:04.843 回答
0

除了您所指的两个不同的框架(这是解决的问题https://stackoverflow.com/a/1450488/1326149),您应该在 EVT 线程中执行所有图形操作(因为您的程序即使它运行良好因为您可能无法移植到不同的平台)。

于 2012-05-23T10:54:27.363 回答