リスナークラス

Revised: May/11th/2003

前節で見てきたとおり、イベントは、リスナーインタフェースを実装したクラスでリスナーを登録することで処理できるようになります。例えば、 ActionListener インタフェースを実装したクラスでは、イベントを受け取りたいイベントソース部品に ActionListener を add し、そこから actionPerformed(ActionEvent e) メソッドを実装し、具体的な処理を記述します。この例でも、イベントを受け取るオブジェクトと、実際の処理は分離していますが、画面設計を行うクラス内にリスナを記述することになります。

リスナは、画面設計を行うクラスから分離して、独立したクラスにすることが出来ます。

サンプル

次の例は、リスナが他のクラスに分離した例です:

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class ListenerClass extends Applet {
	public String status;

	public void init() {
		//リスナークラスのインスタンス化
		EventHandler eh = new EventHandler(this);
		//フィールドの初期化
		status="out";
		//リスナーの追加
		this.addMouseListener(eh);
	}

	public void paint(Graphics gs) {
		if(status.equals("in")) {
			gs.setColor(Color.red);
			gs.drawString("Mouse is in.", 20,20);
		} else {
			gs.setColor(Color.blue);
			gs.drawString("Mouse is Out.", 20,20);
		}
	}
}

//マウスに関するイベントを取得するイベントリスナーインタフェース
//MouseListener の実装クラス
class EventHandler implements MouseListener {
	ListenerClass apl;
	EventHandler(ListenerClass obj){
		apl = obj;
	}
	public void mouseEntered(MouseEvent e) {
		apl.status = "in";
		apl.repaint();
	}
	public void mouseExited(MouseEvent e) {
		apl.status = "out";
		apl.repaint();
	}

	//空の実装
	public void mouseClicked(MouseEvent e) {}
	public void mousePressed(MouseEvent e) {}
	public void mouseReleased(MouseEvent e) {}
}
アプレットが実行できない場合の代替内容。
アプレット: ListenerClass.class


Copyright © 2001-2003 SUGAI, Manabu. All Rights Reserved.