web-dev-qa-db-ja.com

別のJFrameを閉じずに別のJFrameを閉じますか?

2つ(またはそれ以上)JFramesを同時に表示したい。
そのうちの1つを閉じると(デフォルトの閉じるボタンを使用)、他のフレームが表示されたままになります。

どうやってやるの?

53
Keating

JFrameが閉じられたときにアプリケーションを終了するnotを行う場合は、

_setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE)
_

の代わりに

_setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
_

ドキュメント から:

  • _DO_NOTHING_ON_CLOSE_(WindowConstantsで定義):何もしないでください。登録されたWindowListenerオブジェクトのwindowClosingメソッドで操作を処理するプログラムを要求します。
  • _HIDE_ON_CLOSE_(WindowConstantsで定義):登録されたWindowListenerオブジェクトを呼び出した後、フレームを自動的に非表示にします。
  • _DISPOSE_ON_CLOSE_(WindowConstantsで定義):登録されたWindowListenerオブジェクトを呼び出した後、フレームを自動的に非表示にして破棄します。
  • _EXIT_ON_CLOSE_(JFrameで定義):System exitメソッドを使用してアプリケーションを終了します。これはアプリケーションでのみ使用してください。

これは質問が明確になる前の私の答えでしたが、まだ役に立つかもしれません:

同じフレームを再度表示する場合は、JFramesetVisible(false)を使用できます。
それ以外の場合は、dispose()を呼び出して すべてのネイティブ画面リソースを削除 にします。

84
Peter Lang

それはあなたを助けますか?

import Java.awt.BorderLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class TwoJFrames {
    public static void main(String[] args) {
        int nb = 4;
        if (args != null && args.length > 0) {
            nb = Integer.parseInt(args[0]);
        }

        final int frameCount = nb;
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                for (int i = 0; i < frameCount; i++) {
                    JFrame frame = new JFrame("Frame number " + i);
                    frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
                    JPanel p = new JPanel(new BorderLayout());
                    p.add(new JLabel("Click on the corner to close..."), BorderLayout.CENTER);
                    frame.setContentPane(p);
                    frame.setSize(200, 200);
                    frame.setLocation(100 + 20 * i, 100 + 20 * i);
                    frame.setVisible(true);
                }
            }
        });

    }
}
3
Laurent K