Вопрос

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 все еще отображается на моем рабочем столе.Как я могу это исправить?

Это было полезно?

Решение

Ты создаешь еще один 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");
   }
}

Другие советы

Проблема в том, что ваш основной метод использует другой JFrame, чем ваш конструктор.Ваш конструктор Frame создает новый экземпляр JFrame (используя новый JFrame).Когда вы вызываете f.setVisible(false), он переходит к вашему фрейму, а не к созданному JFrame.

Проблема здесь в том, что ваш класс «Frame» создает экземпляр нового JFrame.Вызов setVisible в Frame не влияет на отображаемый JFrame.

Вы можете исправить это, просто используя экземпляр JFrame или просто создав подкласс.Не делайте и то, и другое.

Помимо двух разных кадров, о которых вы говорите (это проблема, на которую ответили https://stackoverflow.com/a/1450488/1326149), вам следует выполнять все графические операции в потоке EVT (поскольку ваша программа, даже если она отлично работает для вас, может быть непереносима на разные платформы).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top