2

私はこのようなクラスを持っています:

public class A {
    public static void main() {
        B f1 = new B();
        f1.setVisible(true);
    }

    class B extends JFrame {
        public B() {
            JButton btn = new JButton("click me");
            btn.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent evt) {
                    C f2 = new C();
                    f2.setVisible(true);
                }
            });
            add(btn);
        }
    }

    class C extends JFrame {
        public C() {
            //whatever here
        }
    }
}

このJavaコードを最初に実行したとき、ウィンドウXには「クリックしてください」というボタンが含まれています。クリックすると、別の新しいウィンドウYが表示されます。しかし、問題は、新しいウィンドウYを閉じると、古いウィンドウXがYとともに自動的に閉じられることです。(つまり、同時に閉じられます)

私がやりたいのは、Yを閉じた後、Xはそこにとどまり、閉じられないようにすることです。どうやってするの?

4

3 に答える 3

3

最も簡単な方法は、this.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE)を2番目のウィンドウコンストラクターに配置することです。

その他の方法: http: //www.leepoint.net/notes-java/GUI/containers/10windows/12frameclose.html

于 2012-05-08T14:07:08.900 に答える
2

メソッドの引数を変更しsetDefaultCloseOperation()ます。これは、閉じるボタンがクリックされたときに何が起こるかを定義します。この場合、DISPOSE_ON_CLOSE引数として使用します。両方のフレームが破棄される理由は、おそらく、引数をに設定したためですEXIT_ON_CLOSE(これを明示的に設定しなかった場合は、それが自動的に行われました。これは、すべてのフレームのデフォルトのクローズ動作です)。これには、プロセス全体が終了します。開いているすべてのウィンドウとフレーム。さらにサポートが必要な場合は、お問い合わせください。:)

于 2012-05-08T14:09:29.507 に答える
0

どのDefaultCloseOperationにYフレームがありますか?おそらくEXIT_ON_CLOSEであるため、XはYとともに閉じられます。DISPOSE_ON_CLOSEに変更するか、デフォルト値のままにします。動作するはずです。

于 2012-05-08T14:08:16.470 に答える