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 |