JFrame не скрывает, когда setVisible (false) - PullRequest
2 голосов
/ 20 сентября 2009
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 ]

5 голосов
/ 20 сентября 2009

Вы создаете еще один 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 голос
/ 20 сентября 2009

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

0 голосов
/ 23 мая 2012

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

0 голосов
/ 20 сентября 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...