TITLE:JFrameの複数作成と終了

Posted by aterai at 2005-06-27

JFrameの複数作成と終了

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

  • &jnlp;
  • &jar;
  • &zip;
CloseOperation.png

サンプルコード

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(JFrame.EXIT_ON_CLOSE);
//    }
//  }
//});
  return frame;
}

解説

WindowListenerで終了時に自分が最後のフレームの場合だけsetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)するように設定しています。 すべてのフレームに、setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)を設定して、Java VM 内で最後の表示可能なウィンドウが破棄されると、VM が終了するようになっています。


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

参考リンク

コメント

  • 1代目のjframeから複数の2代目のjframeを作り出す。また2代目のjframeから3代目のjframeを作り出す。適当に選んだ1つの2代目jframeを閉じると、その2代目から作り出した3代目jframeも同時にdisposeしたい。即ち別の2代目とそこから生成した3代目には影響(dispose)を及ぼさないするにはどうすれば宜しいでしょうか?宜しくご教示ください。 -- Panda