今までの例ではボタンが表示はされましたが、押しても何もなりませんでした。これはButtonでも書いたようにボタンが押されたなどの処理を書いていなかったからです。AWTではボタンが押されたかをずっと監視するポーリングという方式ではなく、ボタンが押された場合には決まったメソッドが自動で呼びだれるようにプログラムをします。このようなプログラム方式をイベントドリブンと言います。また、このような「ボタンが押された」「マウスが動いた」という現象をイベントと言い、このイベントの発生を監視するクラスをイベントリスナーと言います。
もう少し具体的に説明します。Javaは何かしらのイベントが発生した場合に、EventObjectというクラスのインスタンスを作成します。EventObjectは下記のようにいくつかのサブクラスがあり、実際はこれらのサブクラスのインスタンスが作成されることになります。そしてこのインスタンスをイベントリスナーに渡します。イベントリスナーは1つとは限らず、複数存在する場合もあります。このような場合でもEventObjectのインスタンスは作成されず、同じEventObjectが複数のイベントリスナーに渡されます。
EventObjectを渡されたイベントリスナーは、ComponentクラスのaddXXXXListenerによって登録されているComponentのサブクラスの指定されたメソッドを呼び出します。これらのメソッドは決まったイベントリスナーをインプリメントすることで、そのメソッドが定義されていることが保証されます。
わかりにくいかもしれませんが、次ページでActionListenerの例を挙げて、ボタンが押された時の処理について説明します。
EventObject
EventObjectは、既存のものを利用できるだけでなく、自分でサブクラスを定義することもできます。
コンストラクタ |
EventObject(Object source)
イベント発生もとのオブジェクトをsourceとしてEventObjectを作ります。 |
メソッド |
Object |
getSource()
最初に発生したイベントを返します。 |
String |
toString()
文字列表現を返します。 |