2011年8月1日月曜日

フレームを閉じると同時にプログラムを終了させる(Java)

【3-1】
import javax.swing.JFrame;
public class Main {
    public static void main(String[] args){
       JFrame frame = new JFrame(); 
  //フレームを閉じるとプログラムも終了です。
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       frame.setSize(500, 300);
       frame.setVisible(true);
    }
}
 【実行結果


【環境】
Macで動くEclipse上
(Windowsでは少し変わるけど、実行結果は同じ)
【解説】
あれっ、前回と同じ・・・?
はい、見た目は全く同じです。
違いは,ウィンドウを閉じた時のプログラムの状態。

今回は,ウィンドウフレームを閉じると同時にプログラムも終了させます。

今回のソースを追加しないと,ウィンドウフレームを閉じても裏でプログラムが動き続けています。だから,
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
 上記のソースは,忘れずに追加しておきましょう。

注:追加しないプログラム(例,2回目で紹介したサンプルソース_2)は,ウィンドウを閉じても,裏でプログラムは動き続けています。実行を繰り返すと,複数のプログラムが動いた状態になってます。注意が必要だ!!

以上のようにswingの場合は1行で済むのですが、AWTの場合はちょっと煩雑なんだよね。
使う機会は減ってきているとはいえ、過去のプログラム資産を見るためには頭の片隅にでも置く必要がありそうなので記述していきます。

Adapterクラスを使用した基本例
【3-2】
import java.awt.Frame;
import java.awt.event.*;

public class Test {
    public static void main(String[] args){
       Gui frame = new Gui();
       frame.setSize(500, 300);
       frame.setVisible(true);
    }
}
class Gui extends Frame{
    public Gui(){
           WClose wc = new WClose();
           addWindowListener(wc);
    }
}
class WClose extends WindowAdapter {
      public void windowClosing(WindowEvent we){
               System.exit(0);
      }
}

Adapterクラスを内部クラスを利用した応用例

【3-2】
import java.awt.Frame;
import java.awt.event.*;

public class Test {
    public static void main(String[] args){
       Gui frame = new Gui();
       frame.setSize(500, 300);
       frame.setVisible(true);
    }
}
class Gui extends Frame{
    public Gui(){
           addWindowListener(new WindowAdapter(){
                  public void windowClosing(WindowEvent we){
                      System.exit(0);
             }
           });
    }
}

0 件のコメント: