2つ(またはそれ以上)JFramesを同時に表示したい。
そのうちの1つを閉じると(デフォルトの閉じるボタンを使用)、他のフレームが表示されたままになります。
どうやってやるの?
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メソッドを使用してアプリケーションを終了します。これはアプリケーションでのみ使用してください。これは質問が明確になる前の私の答えでしたが、まだ役に立つかもしれません:
同じフレームを再度表示する場合は、JFrame
でsetVisible(false)
を使用できます。
それ以外の場合は、dispose()
を呼び出して すべてのネイティブ画面リソースを削除 にします。
それはあなたを助けますか?
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);
}
}
});
}
}