• category: swing folder: CloseOperation title: JFrameの複数作成と終了 tags: [JFrame, WindowListener] author: aterai pubdate: 2005-06-27T01:43:23+09:00 description: JFrameを複数作成し、これらをすべて閉じた時にアプリケーションを終了します。 image: https://lh3.googleusercontent.com/_9Z4BYR88imo/TQTJey1HvEI/AAAAAAAAAUc/KdbEeHP-Ij0/s800/CloseOperation.png

概要

JFrameを複数作成し、これらをすべて閉じた時にアプリケーションを終了します。

サンプルコード

private static int number = 0;
public static JFrame createFrame(String title) {
  JFrame frame = new JFrame((title == null) ? "Frame #" + number : title);
  frame.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
  number++;
  // frame.addWindowListener(new WindowAdapter() {
  //   @Override public void windowClosing(WindowEvent e) {
  //   number--;
  //     if (number == 0) {
  //       JFrame f = (JFrame) e.getSource();
  //       f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
  //     }
  //   }
  // });
  return frame;
}
View in GitHub: Java, Kotlin

解説

上記のサンプルでは、すべてのJFramesetDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)を設定しているため、Java VM内で最後の表示可能なWindowが破棄されるとVMが終了します。


When DISPOSE_ON_CLOSE met WebStartによると、Web Startで実行する場合はDISPOSE_ON_CLOSEではなくEXIT_ON_CLOSEを使っておいた方が良さそうです。このため、上記のサンプルでは解説とは異なりコメントアウトしたコードで終了するようになっています。

参考リンク

コメント