上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
--.--.-- / Top↑
これは定義しといた方がいいです。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
JavaプログラミングMini TIPs - 0009【WindowListenerの追加】
----------------------------------------------------------------
知っていると便利?いつかは役立つ?……かも知れないTIPsです。
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
自分がJavaプログラミングを始めた当時から思っていた事がありました。Windowを使うプログラムの終了ルートは2通りあるんでは?…と。

Window(フレーム)を使用したプログラムでは、メイン以下のプロセス(mainやその他追加定義しているプロセス)では全ての処理過程を定義しますが、「終了」時の手続きも通常であれば明確に定義します。 最終行で「System.exit(0);」の定義は勿論ですが、その直前段階でプログラムが終了する前に行って置きたい処理もあったりします。

ファンクションキーなどで終了機能として明確に定義した終了処理の場合は、必ず意識して定義した処理を通過しますが、例えばWinodwの右上隅の「×」ボタンを押してもプログラムは終了可能です。注意しなければならないのは、この「×」ボタンを押した時には、通常の終了処理を経ること無くプログラムが終了してしまう点です。

終了処理が「System.exit(0);」のみの場合は問題ないと思うのですが、終了直前に必ず行って置きたい処理があるような時には、WindowListenerの指定を行えば終了直前処理(通常であればメイン処理と同様)を必ず通せるように出来ます。

■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
WindowListenerの指定
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
<参考>
「2 Windowのイベント」

WindowListenerはWindowに対するイベントが上がった時に、イベント其々に対応したメソッドを起動する機能のようです。今回意識するのは「×」ボタンですが、他にも細かくコントロール出来ます。

Winodwの右上隅の「×」ボタンを押した時には、windowClosing(〜)メソッドが起動されますので、(通常であればメイン処理と同様の)終了直前処理は、ここに定義しておきます。

<参考>
「JavaTM Platform, Standard Edition 6 API 仕様」
インタフェース WindowListener


---------------------------------------------------------
<使い方>
---------------------------------------------------------
1.implementsでWindowListenerを追加。
2.フレームへaddWindowListenerを定義。
3.WindowListenerの関連メソッドの実装。

---------------------------------------------------------
<使用例>
---------------------------------------------------------
<注:以下はEclipse環境での説明です。>

-----------------------------------------
1.implementsでWindowListenerを追加。
-----------------------------------------
例えば以下の様なclass定義にWindowListenerを追加する場合。
public class test_class extends JFrame implements ActionListener{

次のようにclassステップのimplementsにWindowListenerを追加します。ちなみにimplementsへの追加が複数になる場合は名前を「,」(カンマ)で区切って追加します。

「,」(カンマ)で区切ってWindowListenerを追加
class test_class extends JFrame implements ActionListener, WindowListener{

WindowListenerにエラーが付きます。(WindowListenerの文字列にエラーの印である赤い波線のアンダバーが付きます)

WindowListenerの文字列にカーソルを当てると以下の表示があるので「WindowListenerをインポートします」をクリックして実行。
WindowLis1401.png


-----------------------------------------
2.フレームへaddWindowListenerを定義。
-----------------------------------------
実行クラスのFrameへaddWindowListenerを定義します。自クラスの指定では this を使います。

(例1)
  frame.addWindowListener(this);
(例2)
  this.addWindowListener(this);

(例1)のframeは、JFrameで事前定義した名前になります。コンストラクタで定義する場合、フレームの定義方法によっては(例1)や(例2)のようになったりします。

-----------------------------------------
3.WindowListenerの関連メソッドの実装。
-----------------------------------------
WindowListenerの追加をすると、WindowListenerのエラーが消え、今度はクラス名にエラーが付きます。(クラス名にエラーの印である赤い波線のアンダバーが付きます)

クラス名の文字列にカーソルを当てると以下の表示があるので「実装されていないメソッドを追加」をクリックして実行します。
WindowLis1402.png

以下のコードがEclipseにより自動追加されます。

ここから↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
public void windowOpened(WindowEvent e) { 
// TODO 自動生成されたメソッド・スタブ

}

public void windowClosing(WindowEvent e) {
// TODO 自動生成されたメソッド・スタブ

}

public void windowClosed(WindowEvent e) {
// TODO 自動生成されたメソッド・スタブ

}

public void windowIconified(WindowEvent e) {
// TODO 自動生成されたメソッド・スタブ

}

public void windowDeiconified(WindowEvent e) {
// TODO 自動生成されたメソッド・スタブ

}

public void windowActivated(WindowEvent e) {
// TODO 自動生成されたメソッド・スタブ

}

public void windowDeactivated(WindowEvent e) {
// TODO 自動生成されたメソッド・スタブ

}
ここまで↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

ここでwindowClosingに以下の様に記述しておきます。

(参考例)
public void windowOpened (WindowEvent e) {}
public void windowClosing (WindowEvent e) {
  // ここに終了時に必要な処理コードを記述!
  System.exit(0);   //* 終了
}
public void windowClosed (WindowEvent e) {}
public void windowIconified (WindowEvent e) {}
public void windowDeiconified(WindowEvent e) {}
public void windowActivated (WindowEvent e) {}
public void windowDeactivated(WindowEvent e) {}


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
WindowAdapter
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
WindowListenerを追加すると必ず7つのメソッドを定義しなければなりませんが、WindowAdapterを使用すると必要なメソッド定義のみに出来るようです。

<参考>
リスナー

<使用例>
余計なクラスが増えるため私は未使用ですが、下の様に定義します。
-(test.java)---------------------------------------------------
package hoge;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

public class test extends Frame {
 test() {
  this.addWindowListener(new WinLis());
  setSize(100, 100);
  show(); //* 何もしないWindow
  }
 public static void main(String[] args){ new test(); }
}

class WinLis extends WindowAdapter {
 public void windowClosing(WindowEvent e)
 { System.out.println("hogehoge"); //* コンソールで終了確認
  System.exit(0);
 }
}
---------------------------------------------------------------
(注)
機能不足なここの糞ブログでは1桁目からの空白コードが表示できない為
上記コードの1桁目から空白の部分は全角文字の空白に置き換えています。
もし、コピペして実験する場合は半角文字の空白に置き換えて使用して下さい。

--- 以上 ---


<お断り>
・Javaコードはバージョンによって使用に影響を受ける可能性があります。
 (バージョンによって未サポートのためエラーとなるコードも存在します)
・当サンプルはEclipse使用前提のためimportステップは省略する場合があります。


■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
当作業の実行環境
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
◆オペレーティングシステム:CentOS release 5.11 (Final) CPU:32bit メモリ:512MB
 Kernel Version :2.6.18-398.el5
 Red Hat Nash Version:5.1.19.6
◆Java SE Development Kit 8
(JREの環境)
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) Client VM (build 25.0-b70, mixed mode, sharing)
2014.11.24 / Top↑
Secret(管理者にだけ表示を許可する)


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。