0

2JFrame秒、

JFrame Main; // Main JFrame

JFrame Sub; //Second JFrame that is initialized from within Main via a JMenuItems ActionListener.

mainMenuItem.setActionListener(new ActionListener(){
    public void actionPerformed(ActionEvent arg0) {
        try{
            Sub subFrame = new Sub();
            subFrame.setVisible(true);
        }catch(Exception e){}
        }
    });
}

問題は、2 番目の JFrame (Sub) を閉じるたびに、最初の JFrame も閉じることです。

両方JFrameに次のものがあります。

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

それは問題の一部ですか?

4

3 に答える 3

5

EXIT_ON_CLOSESystem.exit()フレームが閉じられたらすぐに ( ) プログラムを終了することを意味します。

おそらく、これを に設定し、両方のフレームが閉じられている場合にのみDISPOSE_ON_CLOSE、を追加しWindowListenerてプログラムを閉じます。

(または、メイン フレームのみに を持たせたい場合もありますEXIT_ON_CLOSE)

于 2013-10-21T16:45:09.317 に答える
3

はい。JFrame.EXIT_ON_CLOSE定義により、アプリケーションを終了します。2 回目のFrame使用DISPOSE_ON_CLOSEまたはHIDE_ON_CLOSE.

お役に立てれば!

于 2013-10-21T16:46:12.277 に答える
2

あなたは次のように述べています:

JFrame サブ; // JMenuItems ActionListener を介して Main 内から初期化される 2 番目の JFrame。

これは、設計上の問題があることを示唆しています:

  • 2 番目の「フレーム」は、別個の独立したメイン プログラム ウィンドウとして動作しないため、JFrame であってはなりません。
  • 代わりに、メインの JFrame に依存し、親ウィンドウから表示されるため、ダイアログとして機能します。したがって、セカンダリ ウィンドウを JFrame ではなく JDialog にすると、これらの問題はすべて解消されます。
  • ダイアログが開いている間はユーザーがメイン ウィンドウにアクセスできないモーダルダイアログにするか、非モーダルダイアログにするかを検討する必要があります。
  • そうは言っても、1 つのウィンドウ/JFrame を使用し、CardLayout を介してビューを交換する方がよい場合もあります。

このリンクを読んでください:複数の JFrames の使用、良い/悪い習慣? 特に、Andrew Thompson のコミュニティ wiki の回答をご覧ください。

于 2013-10-21T16:51:01.703 に答える