新しいイベント・モデルの特徴

JDK1.1 の新しいイベントモデルについて解説します。
JDK1.1 のイベントの取り扱いは、JDK 1.02 とまったく違うモデルを採用します。 イベントを表すクラスも、従来の java.awt.Event クラスから、 新たに用意されたクラス群に移行します。 (ただし、JDK1.1 は 1.02 の完全なスーパーセットであることを保証しています から、従来のイベントモデルや Eventクラスに依存したプログラムも 動作は保証されます。)
従来のモデルでは、イベントは Component(およびそのサブクラス)の オブジェクトのメソッドによって処理されました。 コンポーネントのオブジェクトは、 「システムからイベントを受け取るウィンドウ」の役割と 「イベントを処理する」役割の両方を備えています。 自分自身で処理しきれない場合は、「イベントの伝搬」によって 他のオブジェクトに処理をまかせることもできましたが、 その相手は自分の外側にあるウィンドウのオブジェクトに限られました。
これに対して新しいイベントモデルでは、 コンポーネントから「イベントを処理する」機能を分離することが 図られています。 コンポーネントは任意のオブジェクトに対して イベントの伝搬関係を作ることができます。 このため JDK1.0のモデルに比べてはるかに柔軟な処理が可能になりました。 ただし、そのために新しい概念がいくつか導入されています。 新しいイベントモデル用のイベントのクラス群、 それと Listener と Adapter です。
イベントを処理するクラスは、 EventListener の拡張である MouseListener, ActionListener など のインターフェイスを実装します。 それぞれで宣言された専用のメソッドがイベントの処理の記述に用いられます。 この仕組みによって、コンポーネント以外のオブジェクトでも イベント処理を行うことが可能になります。 あるいは Listener のメソッドを既に実装済みの Adapter のクラスを 拡張しても実現できます。 実際、それぞれの Listener インターフェイスに対応して、 Adapter と呼ばれる クラスが存在します。Adapter のクラスは、Listener に用意された メソッドを実装しています(ただし定義の中身は空)。 Adapterクラスのサブクラスは、すべてイベント処理の能力を持つことになります。

新しいモデルでは、イベントの情報は階層化されたクラス群によって処理され ます。具体的には、MouseEvent, ActionEvent などです。 Listener, Adapter,イベントのクラス群は、いずれも 新しいサブパッケージ java.awt.event の中に用意されています。 ただし、EventListener インターフェイスは java.util パッケージに、 すべてのイベントのクラスのスーパークラスとなる EventObject クラスは java.util に、AWTEvent クラスは java.awt に含まれます。

*イベントのクラスの継承関係


java.lang.Object
       |
       |-java.awt.Event (for Old Model)
       |
       |-java.util.EventObject
                |
                |-java.awt.AWTEvent
                        |
                        |-java.awt.event.ActionEvent
                        |-java.awt.event.ItemEvent
                        |-java.awt.event.AdjustmentEvent
                        |-java.awt.event.TextEvent
                        |-java.awt.event.ComponentEvent
                                |
                                |-java.awt.event.ContainerEvent
                                |-java.awt.event.FocusEvent
                                |-java.awt.event.PaintEvent
                                |-java.awt.event.WindowEvent
                                |-java.awt.event.InputEvent
                                        |
                                        |-java.awt.event.KeyEvent
                                        |-java.awt.event.MouseEvent