Swing/CloseOperation のバックアップ差分(No.12)
- バックアップ一覧
- 現在との差分 を表示
- 現在との差分 - Visual を表示
- ソース を表示
- バックアップ を表示
- Swing/CloseOperation へ行く。
- 1 (2005-06-27 (月) 01:43:23)
- 2 (2005-10-30 (日) 17:48:31)
- 3 (2006-02-27 (月) 15:33:38)
- 4 (2006-04-12 (水) 19:37:38)
- 5 (2007-04-06 (金) 21:18:10)
- 6 (2007-10-12 (金) 19:37:20)
- 7 (2008-01-17 (木) 12:46:37)
- 8 (2008-02-14 (木) 13:31:01)
- 9 (2011-03-07 (月) 15:12:52)
- 10 (2011-03-07 (月) 18:58:49)
- 11 (2013-03-28 (木) 17:58:31)
- 12 (2013-08-17 (土) 15:17:35)
- 13 (2014-05-22 (木) 14:03:02)
- 14 (2014-10-26 (日) 04:13:11)
- 15 (2015-03-04 (水) 17:20:03)
- 16 (2015-03-05 (木) 00:36:00)
- 17 (2016-12-08 (木) 14:23:44)
- 18 (2017-12-05 (火) 18:32:27)
- 19 (2019-08-09 (金) 18:36:43)
- 20 (2021-04-09 (金) 19:43:05)
- 追加された行はこの色です。
- 削除された行はこの色です。
TITLE:JFrameの複数作成と終了 #navi(../) #tags() #tags(JFrame, WindowListener) RIGHT:Posted by &author(aterai); at 2005-06-27 *JFrameの複数作成と終了 [#pc54259a] JFrameを複数作成し、これらをすべて閉じた時にアプリケーションを終了します。 ``JFrame``を複数作成し、これらをすべて閉じた時にアプリケーションを終了します。 -&jnlp; -&jar; -&zip; //#screenshot #ref(http://lh3.ggpht.com/_9Z4BYR88imo/TQTJey1HvEI/AAAAAAAAAUc/KdbEeHP-Ij0/s800/CloseOperation.png) **サンプルコード [#qf5934db] #code(link){{ 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; } }} **解説 [#s4224022] %%WindowListenerで終了時に自分が最後のフレームの場合だけsetDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)するように設定しています。%% すべてのフレームに、setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)を設定して、Java VM 内で最後の表示可能なウィンドウが破棄されると、VM が終了するようになっています。 %%このサンプルでは、``WindowListener``で終了時に自分が最後のフレームの場合だけ``setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)``するように設定しています。%% すべてのフレームに、``setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE)``を設定して、``Java VM``内で最後の表示可能なウィンドウが破棄されると、``VM``が終了するようになっています。 ---- [http://www.pushing-pixels.org/?p=232 When DISPOSE_ON_CLOSE met WebStart]によると、Web Start で実行する場合は DISPOSE_ON_CLOSE ではなく、EXIT_ON_CLOSE を使っておいた方が良いようです。このため、上記のサンプルでは、解説とは異なり、コメントアウトしたコードで終了するようになっています。 [http://www.pushing-pixels.org/?p=232 When DISPOSE_ON_CLOSE met WebStart]によると、``Web Start``で実行する場合は``DISPOSE_ON_CLOSE``ではなく、``EXIT_ON_CLOSE``を使っておいた方が良さそうです。このため、上記のサンプルでは、解説とは異なり、コメントアウトしたコードで終了するようになっています。 **参考リンク [#k9256100] -[http://docs.oracle.com/javase/jp/6/api/java/awt/doc-files/AWTThreadIssues.html AWT Threading Issues] -[http://www.pushing-pixels.org/?p=232 When DISPOSE_ON_CLOSE met WebStart] - [http://docs.oracle.com/javase/jp/6/api/java/awt/doc-files/AWTThreadIssues.html AWT Threading Issues] - [http://www.pushing-pixels.org/?p=232 When DISPOSE_ON_CLOSE met WebStart] **コメント [#if26eeb6] - 1代目のjframeから複数の2代目のjframeを作り出す。また2代目のjframeから3代目のjframeを作り出す。適当に選んだ1つの2代目jframeを閉じると、その2代目から作り出した3代目jframeも同時にdisposeしたい。即ち別の2代目とそこから生成した3代目には影響(dispose)を及ぼさないするにはどうすれば宜しいでしょうか?宜しくご教示ください。 -- [[Panda]] &new{2011-03-07 (月) 15:12:52}; -- ルートになるJFrameはEXIT_ON_CLOSE、残りはDISPOSE_ON_CLOSEとし、各JFrameの親子関係をどこかに保持するなどしておけば、あとは閉じる時に自分(JFrame)の子も深さ優先で検索して同様に閉じていくだけで特に問題ない?と思います。 -- [[aterai]] &new{2011-03-07 (月) 18:58:49}; - ``1``代目の``jframe``から複数の``2``代目の``jframe``を作り出す。また``2``代目の``jframe``から3代目の``jframe``を作り出す。適当に選んだ``1``つの``2``代目``jframe``を閉じると、その``2``代目から作り出した``3``代目``jframe``も同時に``dispose``したい。即ち別の``2``代目とそこから生成した``3``代目には影響(``dispose``)を及ぼさないするにはどうすれば宜しいでしょうか?宜しくご教示ください。 -- [[Panda]] &new{2011-03-07 (月) 15:12:52}; -- ルートになる``JFrame``は``EXIT_ON_CLOSE``、残りは``DISPOSE_ON_CLOSE``とし、各``JFrame``の親子関係をどこかに保持するなどしておけば、あとは閉じる時に自分(``JFrame``)の子も深さ優先で検索して同様に閉じていくだけで特に問題ない?と思います。 -- [[aterai]] &new{2011-03-07 (月) 18:58:49}; #comment