閉じるボタンをクリックした時にアプリケーションを終了する

フレームの画面右上には最大化ボタンや最小化ボタンと並んで「×」と表示されている閉じるボタンがあります。デフォルトでは閉じるボタンをクリックしてもフレームが非表示になるだけでアプリケーションは終了しません。ここでは閉じるボタンがクリックされた時にアプリケーションが終了するように設定する方法について解説します。

(Last modified: )

閉じるボタンをクリックしたときの処理を設定する

フレームを表示させた時に、フレームの右上に 3 つのボタンが表示されます。一番右にある「×」と表示されているボタンが閉じるボタンです。

閉じるボタンをクリックしたときの処理を設定する(1)

デフォルトの状態だと閉じるボタンをクリックすると表示されたフレームは閉じますが、アプリケーションは終了していないため、コマンドプロンプトを見てみるとプログラムが実行された状態のままとなっています。(アプリケーションを終了するには Ctrl + c キーを押してください)。

閉じるボタンをクリックしたときの処理を設定する(2)

閉じるボタンがクリックされた時の処理を設定するには JFrame クラスで定義されている setDefaultCloseOperation メソッドを使います。

public void setDefaultCloseOperation(int operation)

ユーザーがこのフレームの「クローズ」を開始したときに、デフォルトで実行される処理を設定します。 次のうち1つを指定する必要があります。
・DO_NOTHING_ON_CLOSE (WindowConstantsに定義):何も行わない。プログラムは登録されているWindowListenerオブジェクトのwindowClosingメソッドで処理を行う必要がある。
・HIDE_ON_CLOSE (WindowConstantsに定義):登録されている任意のWindowListenerオブジェクトを呼び出したあとで、自動的にフレームを隠す。
・DISPOSE_ON_CLOSE (WindowConstantsに定義):登録されている任意のWindowListenerオブジェクトを呼び出したあとで、自動的にフレームを隠して破棄する。
・EXIT_ON_CLOSE (WindowConstantsで定義): System exitメソッドを使用してアプリケーションを終了します。 アプリケーションでのみ使用する。デフォルトではHIDE_ON_CLOSEが設定されます。
このプロパティの値を変更すると、プロパティ名defaultCloseOperationでプロパティ変更イベントがトリガーされます。
ノート: Java仮想マシン(VM)内で最後の表示可能なウィンドウが破棄されると、VMが終了することがあります。詳細は、「AWTスレッドの問題」を参照してください。

パラメータ:
operation - ユーザーがフレームを閉じるときに実行されるべき処理

例外:
IllegalArgumentException - defaultCloseOperationの値が前述の有効な値と異なる場合
SecurityException - EXIT_ON_CLOSEが指定されていて、SecurityManagerが呼出し側にSystem.exitの呼出しを許可しない場合

引数に指定できる値は次の定数のいずれかです。

JFrame.DO_NOTHING_ON_CLOSE
JFrame.HIDE_ON_CLOSE
JFrame.DISPOSE_ON_CLOSE
JFrame.EXIT_ON_CLOSE

デフォルトの値は HIDE_ON_CLOSE となっており閉じるボタンをクリックしてもフレームが非表示となるだけでプログラムそのものは終了しません。閉じるボタンがクリックされた時にアプリケーションが終了するようにするには EXIT_ON_CLOSE を設定します。

実際の使い方は次のようになります。フレームを作成したあとで setDefaultCloseOperation メソッドを使って閉じるボタンがクリックされた時の処理を設定しています。

JFrame frame = new JFrame("MyTitle");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
サンプルコード

それでは簡単なサンプルプログラムを作って試してみます。テキストエディタで次のように記述したあと、 Sample.java という名前で保存します。

import javax.swing.JFrame;

class Sample{
  public static void main(String args[]){
    JFrame frame = new JFrame("MyTitle");
    frame.setSize(728, 400);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
  }
}

次のようにコンパイルを行います。

javac Sample.java

コンパイルが終わりましたら実行します。

java Sample

次のようなフレームが表示されます。

閉じるボタンをクリックしたときの処理を設定する(3)

今回は EXIT_ON_CLOSE を設定しているので、閉じるボタンをクリックするとフレームが閉じるだけでなくアプリケーションも終了します。閉じるボタンをクリックしたあと、コマンドプロンプトを確認してみるとアプリケーションが終了して入力待ちになっていることが確認できます。

閉じるボタンをクリックしたときの処理を設定する(4)

-- --

フレームの閉じるボタンがクリックされた時にアプリケーションが終了するように設定する方法について解説しました。

( Written by Tatsuo Ikura )

プロフィール画像

著者 / TATSUO IKURA

これから IT 関連の知識を学ばれる方を対象に、色々な言語でのプログラミング方法や関連する技術、開発環境構築などに関する解説サイトを運営しています。