2-4: イベントとリスナのクラス


・ JDK1.1 からイベントの情報は階層化されたクラス群によって表されます。 具体的には、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

・ Listener のインターフェイス群は、イベント処理を可能にする機能を提供します。 すべての Listener は java.util パッケージに含まれる EventListener を共通のスーパークラスに持ちます。 実際のプログラムの中で用いられる Listener は java.awt.event パッケージに 含まれ、以下の表のものがあります。

java.awt.event の Listener インターフェイスとその意味
インターフェイス名 対応するAdapterクラス 働き 受け取るイベントのクラス 実装すべきメソッド名
MouseListenerMouseAdapter マウスの出入りやクリックのイベントを受け取る MouseEvent mouseClicked()
mouseEntered()
mouseExited()
mousePressed()
mouseReleased()
MouseMotion-
Listener
MouseMotion-
Adapter
マウスの移動、ドラッグのイベントを受け取る MouseEvent mouseMoved()
mouseDragged()
KeyListenerKeyAdapter キー入力のイベントを受け取る KeyEventkeyPressed()
keyReleased()
keyTyped()
FocusListenerFocusAdapter キーボードフォーカスの移動のイベントを受け取る FocusEventfocusGained()
focusLost()
WindowListenerWindowAdapter ウィンドウの表示、クローズ、消去のイベントを受け取る WindowEvent windowClosed()
windowClosing()
windowDeiconified()
windowIconified()
windowOpened()
ComponentListenerComponentAdapter コンポーネントの表示やレイアウト変更のイベントを受け取る ComponentEvent componentHidden()
componentShown()
componentMoved()
componentResized()
ContainerListenerContainerAdapter Containerへのオブジェクトの追加・削除のイベントを受け取る ContainerEventcomponentAdded()
componentRemoved()
ActionListenerなし Buttonのクリックなどのアクションを受け取るActionEvent actionPerformed()
ItemListenerなし Checkbox などの状態の変更のアクションを受け取る ItemEventitemStateChanged()
TextListenerなし TextArea,TextField の入力のアクションを受け取る TextEventtextValueChanged()
Adjustment-
Listener
なし スクロールバーなどの操作のイベントを受け取る Adjustment-
Event
adjustmentValue-
Changed()

・ イベントを検出するコンポーネントは、 イベントを処理するリスナのオブジェクトを記憶しておく必要があります。 一般に、1つのコンポーネントの一種類のイベントに対して 複数のリスナを登録することが可能です。 そのために Componentクラス(それを継承したクラス)には、 新たに Listener(を実装したオブジェクト) を登録する(および登録を削除する)ためのメソッドが追加されています。

・ Adapterクラス群は、それぞれの対応する Listenerのメソッドを 形式的に実装したクラスです。 Adapterの各クラスはすべて Objectクラスの直接のサブクラスで、 何か特別な機能があるわけではありません。 原理的には、Adapterクラスは使用しないでも Listenerのメソッドを 直接実装すれば同じことですが、 Adapterクラスを継承する形でイベント処理専用のクラスを設計すれば、 プログラムの記述が簡潔になり見やすくなります。
Listener を直接実装しても、Adapterクラスを継承しても、 addMouseListener()のようなメソッドを使う点は変わりません。 addMouseAdapter()のようなメソッドがあるわけではありません。

・ java.awt.eventパッケージ以外のパッケージにも必要に応じて Eventと Listener を表すクラスが提供されています。 たとえば Swingコンポーネントのために新しく追加されたイベント については、 javax.swing.evetパッケージにまとめて提供されています。