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 |