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

参照している2つの異なるフレーム(これはhttps://stackoverflow.com/a/1450488/1326149で回答された問題です)に加えて、EVTスレッドですべてのグラフィック操作を実行する必要があります(プログラムがうまく機能している場合でも別のプラットフォームに移植できない可能性があるため)。

于 2012-05-23T10:54:27.363 に答える
0

ここでの問題は、「Frame」クラスが新しい JFrame をインスタンス化することです。Frame で setVisible を呼び出しても、表示されている JFrame には影響しません。

JFrame インスタンスを使用するか、サブクラス化するだけで修正できます。両方しないでください。

于 2009-09-20T07:11:04.843 に答える