last modified: Feb./4th/2002
GUI では、ユーザがマウスなどのポインタを用いてアクションを起こします。これに応じてソフトウェアは適当な動作を開始します。このようなものをイベント駆動型 (Event Driven) と呼びます。
アプレットでは、ユーザのアクションに応じて、イベントオブジェクトが生成され、これが対応する処理が記述されたイベントリスナーに受け取られます。イベントオブジェクトは、イベントの起こったオブジェクトやイベントの種類など、イベントの情報をラッピングしており、ソースからリスナーへ渡されます。
このように、イベントは「イベントが起こったオブジェクト」(イベントソース)と「イベントリスナー」の間でイベントオブジェクトをやりとりすることで処理します。イベント処理をイベントソースオブジェクトで実装するのではなく、専用のイベントリスナーで処理する方法を代理イベントモデル (delegation event model) と呼びます。
本稿では、イベントリスナーと処理の実装を簡単なサンプルで見てみます。
次の例は、ユーザがボタンを押すアクションによって生成されたイベントオブジェクトをイベントリスナーが拾って、処理の実装へ受け渡すものです。
具体的な動作としてはボタンを押すたびにアプレットに描画された数字が1増えます。
import java.applet.Applet; import java.awt.Button; import java.awt.Graphics; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; //リスナーインタフェースの実装 public class EventTest extends Applet implements ActionListener { Button btn; int i = 0; //アプレットの初期化メソッド public void init() { btn = new Button("Click Me!"); this.add(btn); //イベントリスナーの追加 btn.addActionListener(this); } //アプレットの終了 public void stop() { this.i = 0; } //描画 public void paint(Graphics gs) { gs.drawString("Count: " + (new Integer(i)).toString(), 30,60); } //アクションの結果の定義 public void actionPerformed(ActionEvent e) { this.i++; this.repaint(); } }
アプレット: EventTest.class |
このサンプルでは、イベントリスナーとその実装がどのように部品と関連付けられるかを見ることが出来ます。次節以降で、イベント処理の概要についてかいつまんで紹介します。