• ベストアンサー

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

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をすれば、大丈夫かと思ったら、 綺麗にウィンドウが閉じてしまいました。 どのようにすれば実現出来ますでしょうか?お願いします。

  • Vargas
  • お礼率85% (174/204)
  • Java
  • 回答数3
  • ありがとう数4

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

  • ベストアンサー
  • 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

  • java初心者です

    空のウィンドウを作ってみたものの ウィンドウが閉じれません。ファイル名はMyApp3.javaです。クラスファイルは3つちゃんとできてます import java.awt.*; import java.awt.event.*; class MyFrame extends Frame { public MyFrame(){ addWindowListener(new MyWindowAdapter()); } class MyWindowAdapter extends WindowAdapter { public void WindowClosing(WindowEvent e){ System.exit(0); } } } public class MyApp3 { public static void main(String[] args){ MyFrame f =new MyFrame(); f.setSize(300,200); f.setVisible(true); } }

    • ベストアンサー
    • Java
  • Windowを閉じるときの処理の構造

     Java初心者です。  JavaのGUIプログラムでウインドウを閉じるときの処理で、解説書・解説サイトでは以下のようなサンプルをよく見かけますが、構造が複雑すぎてよく理解できません。 //インスタンス化とか色々省略 JFrame.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent we){ System.exit(0); } });  特に、WindowAdapter(){~}の部分は、解説書を一通り探しても、文法事項として見つからないのですが、これはどういった文法なのでしょうか?  よろしくお願いします。

  • 簡単なこーどですが、エラーの原因が分かりません

    今晩は、JAVAの初心者です、宜しくお願いします。 下のコードでエラーがでます、いくら考えても原因がさっぱり分かりません。 一体何処が悪いのでしょうか、宜しくお願いします。 また、最後の「j.show();」では警告が出ています。 何が原因でしょう?? ============================================================ import java.awt.Graphics; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import javax.swing.JFrame; class JFrame_Ohayou extends JFrame implements WindowListener{ /*********** コンストラクタ ********************/ public JFrame_Ohayou(){ setSize(400,300); setTitle("JFrameのテスト"); addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); } /******************* paint ***********************/ public void paint(Graphics g){ super.paint(g); g.drawString("おはよう",20,40); } } /******************* main ***********************/ public class JFrameTest{ public static void main(String[] args){ JFrame_Ohayou j = new JFrame_Ohayou(); j.show(); } } =============================================================

    • ベストアンサー
    • Java
  • AWTでウィンドウを閉じる仕組み

    import java.awt.*; import java.awt.event.*; class WindowClose extends WindowAdapter{ public void windowClosing(WindowEvent we){ System.exit(0); } } class Figure extends Frame{ public Figure(String name){ setTitle(name); setLocation(300,200); setSize(300,200); setBackground(Color.ORANGE); WindowClose wc = new WindowClose(); addWindowListener(wc); } } public class Test{ public static void main(String [] args){ Figure figure = new Figure("Frame1"); figure.show(); } } 初歩的なことな質問で申し訳ないです。 このような処理でウィンドウを閉じているのですが、具体的に何を取得してどんな動作をしているのかがよくわかりません。 wcというインスタンスにウィンドウリスナーのオブジェクトが追加登録されるという感じだと思いますが、extends されているWindowAdapterクラスにはすでにウィンドウリスナーのインスタンスが実装されていますよね。一体何の意味があるのでしょうか。

    • ベストアンサー
    • Java
  • handleEvent() が非推奨

    handleEvent() をコンパイラが非推奨だと言います。 警告の出ないソースにするにはどうしたらいいんですか? たぶん、 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { dispose(); } }); のようなソースを使えばいいんだと思うけど、 どのように組み込むのかが分かりません。 import java.awt.*; public class Test extends java.applet.Applet { Frame f = new MyFrame(""); public void init() { f.setSize(100, 100); f.show(); } public boolean handleEvent(Event e) { if(e.id == Event.WINDOW_DESTROY) f.dispose(); return super.handleEvent(e); } }

    • ベストアンサー
    • Java
  • フレームを表示できないのですが・・・

    こんにちは。ジャバ初心者です。下記のプログラムを javac Sample120.java と入力してコンパイルはできたのですが java Sample120 と入力すると Exception in thread "main" java.lang.NoClassDefFoundError: Sample120 というメッセージが出て実行できないのですがどのようにすればいいですか? import java.awt.*; import java.awt.event.*; class Sample120 extends Frame { public static void main(String args[]) { Sample120 app = new Sample120(); } public Sample120() { setSize(250,100); setVisible(true); addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } public void paint(Graphics g) { g.drawString("Hello Java AWT!",10,60); } }

    • ベストアンサー
    • Java
  • 自作ウィンドウを閉じる方法について

    只今、これならわかるJAVAという書籍でウィンドウを生成し、×ボタンがクリックされたら、ウィンドウを閉じる(プログラムを終了する)ようなプログラムを作っているのですが、書籍通りに記述しているのですが、×ボタンをクリックしてもウィンドウが閉じません。ソースは、 import java.awt.*; import java.awt.event.*; //ウィンドウを表すクラスFrameを継承し、自作のウィンドウを表すクラスを作成する public class EventDispose extends Frame{ public EventDispose() { addWindowListener(new MyWindowAdapter()); } class MyWindowAdapter extends WindowAdapter{ public void WindowClosing(WindowEvent e) { System.exit(0); } } } です、。表示を行っているクラスが、 public class MyWinApp { public static void main(String[] args) { //自作のウィンドウの生成(コンストラクタの実行) EventDispose ed = new EventDispose(); //ウィンドウのサイズの指定 ed.setSize(300,200); //生成したウィンドウを可視状態にする ed.setVisible(true); } } です。開発環境はeclipseの3.4です。 どうかご教授よろしくお願い致します。

    • ベストアンサー
    • Java
  • Javaのエラーなのですが

    import java.awt.*; import java.awt.event.*; class PrefFrame extends Frame { public PrefFrame(String title) { //フレームのタイトル setTitle(title); //ウィンドウを閉じる時 addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); } } public class PrefTest { public static void main(String args[]) { PrefFrame frm = new PrefFrame("都道府県マスター"); frm.setLocation(300, 200); frm.setSize(250, 350); frm.setBackground(Color.LIGHT_GRAY); frm.setVisible(true); } } と入力しました。コンパイルは出来て、CLASSファイルは作成できたのですが、実行できずにエラーException in thread "main" java.lang.NoClassDefFoundError: PrefTest/javaとなってしまいます。実行するためにはどうしたらよいのでしょうか?

  • getDocumentBase() でエラーがでます

    getDocumentBase() でエラーがでます 下のように書いているのですが getDocumentBase() でエラーがでて困っています 他のところは動いてて それに追加しました 何が原因なのでしょうか? import java.awt.*; import java.awt.event.*; import java.applet.Applet; public class window { public static void main( String[] args ) { AppFrame f = new AppFrame(); image i = new image(); i.init(); f.setSize( 200, 200 ); f.addWindowListener( new WindowAdapter() { public void windowClosing( WindowEvent e) { System.exit(0); } } ); // f.show(); f.setVisible( true ); } } class image extends Applet { Image image; image() { } public void init() { image = getImage( getDocumentBase(), "image.jpg" ); } ...

  • これを正確に実行したいのですが

    再びすみません。 下のプログラムなのですが。コンパイルはできるのに 図が表示されず、終わらず、実行がおかしなことになってしまいます。どこを直したらいいのでしょうか? お願い致します。 import java.awt import java.awt.event.*; class gazou extends Frame { public gazou(){ setSize(300,200); addWindowListener(new WindowAdapter( ) public void windowClosing(WindowEvent e) System.exit(0); } }); } public void paint(Graphics g) g.drawRect(40,40,50,50); g.drawRoundRect(100,40,50,50,10,10); g.drawOval(160,40,50,50); g.drawArc(220,40,50,50,45,270); g.fillRect(40,100,50,50); g.fillRoundRect(100,100,50,50,10,10); g.fillOval(160,100,50,50); g.fillArc(220,100,50,50,45,270); g.drawLine(40,180,260,180); } } public class kadai19{ public static void main(String[] args) { Frame w = new Frame(); w.show( ); } }

    • ベストアンサー
    • Java