• ベストアンサー

ウィンドウが閉じられる直前の処理

addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent evt) { exitForm(evt); } }); private void exitForm(java.awt.event.WindowEvent evt) { if (ある状態だった時) { return; } System.exit(0); } 上記ソースの様にある状態だった時にウィンドウを閉じない様に したいと思っています。returnをすれば、大丈夫かと思ったら、 綺麗にウィンドウが閉じてしまいました。 どのようにすれば実現出来ますでしょうか?お願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sasadora
  • ベストアンサー率68% (59/86)
回答No.3

SwingでJFrameを継承している場合は、 JFrame#setDefaultCloseOperationを使って、 WindowConstants.DO_NOTHING_ON_CLOSEを設定するようにします。 こうすることで、勝手に閉じる処理が行われないようになるので、特定の条件の時にだけ閉じるような処理が可能になります。 逆に言うと、自分で閉じる処理(System.exit(0)など)を記述しなければ閉じられなくなります。 なので、Vargasさんが提示したソースに setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); と1行追記すれば希望の動作になると思います。

Vargas
質問者

お礼

完璧です。ありがとうございます。ヘルプを見て納得しました。デフォルトでは、HIDE_ON_CLOSEになっているのですね。本当にありがとうございました。

その他の回答 (2)

  • UKY
  • ベストアンサー率50% (604/1207)
回答No.2

本来、windowClosing メソッド内で明示的にウィンドウを閉じたりアプリケーションを終了したりするメソッドを呼び出さなければ、ウィンドウは閉じることはありません。 したがって、他にウィンドウにリスナが登録されていて、それがウィンドウを閉じている可能性があります。 特に、AWTではなくSwingを使用している場合は、閉じるボタンを押したときに自動的にウィンドウを消すリスナが勝手に登録されるので、その動作を変更しておく必要があります。

Vargas
質問者

お礼

ありがとうございました。調査していくうちにこの辺の動作を少しづつ理解する事が出来ました。

  • takaP-
  • ベストアンサー率79% (83/105)
回答No.1

private void exitForm(java.awt.event.WindowEvent evt) {   if (ある状態だった時) {     //何がしかの処理   }   else {     System.exit(0);   } } とすれば良いと思います。

Vargas
質問者

お礼

ありがとうございました。

関連するQ&A