Listener のインターフェイス群は、イベント処理を可能にする機能を提供します。
すべての Listener は java.util パッケージに含まれる
EventListener を共通のスーパークラスに持ちます。
実際のプログラムの中で用いられる Listener は java.awt.event パッケージに
含まれ、以下の表のものがあります。
| インターフェイス名 | 対応するAdapterクラス | 働き | 受け取るイベントのクラス | 実装すべきメソッド名 |
|---|---|---|---|---|
| MouseListener | MouseAdapter | マウスの出入りやクリックのイベントを受け取る | MouseEvent |
mouseClicked() mouseEntered() mouseExited() mousePressed() mouseReleased() |
| MouseMotionListener | MouseMotionAdapter | マウスの移動、ドラッグのイベントを受け取る | MouseEvent |
mouseMoved() mouseDragged() |
| KeyListener | KeyAdapter | キー入力のイベントを受け取る | KeyEvent |
keyPressed() keyReleased() keyTyped() |
| FocusListener | FocusAdapter | キーボードフォーカスの移動のイベントを受け取る | FocusEvent |
focusGained() focusLost() |
| WindowListener | WindowAdapter | ウィンドウの表示、クローズ、消去のイベントを受け取る | WindowEvent |
windowClosed() windowClosing() windowDeiconified() windowIconified() windowOpened() |
| ComponentListener | ComponentAdapter | コンポーネントの表示やレイアウト変更のイベントを受け取る | ComponentEvent |
componentHidden() componentShown() componentMoved() componentResized() |
| ContainerListener | ContainerAdapter | Containerへのオブジェクトの追加・削除のイベントを受け取る | ContainertextEvent | componentAdded() componentRemoved() |
| ActionListener | なし | Buttonのクリックなどのアクションを受け取る | ActionEvent | actionPerformed() |
| ItemListener | なし | Checkbox などの状態の変更のアクションを受け取る | ItemEvent | itemStateChanged() |
| TextListener | なし | TextArea,TextField の入力のアクションを受け取る | TextEvent | textValueChanged() |
| AdjustmentListener | なし | スクロールバーなどの操作のイベントを受け取る | AdjustmentEvent | adjustmentValueChanged() |
イベントが発生したコンポーネントは
何らかの方法で、そのことを処理を担当するクラスに伝える必要があります。
そのために Componentクラス(それを継承したApplet)には、
新たに Listener(を実装したオブジェクト)
を登録する(および登録を削除する)ためのメソッドが追加されています。
また、Componentのサブクラスのコンポーネントでも そのクラスが扱うべきイベント(アクション)に対応する 呼び出しを登録するためのメソッドが定義されています。
また、TextFieldやListなどは、ActionListenerも登録もしくは削除できる仕組みに
なっています。つまり複数の種類のアクションに対応しているということです。
たとえば TextFiledの場合、1文字ごとの入力が行われるたびに TextEventが
発生し、TextListenerに対応する textValueChanged()が呼び出されます。
そしてリターンキーが入力されると ActionEventが発生し、ActionListenerに
対応する actionPerformed()が呼び出されます。処理の目的に応じて使い分け
が可能です。
Listの場合は、特定の選択項目をダブルクリックした時に ActionEventが発生します。
これも一覧表にしてまとめておきましょう。
| Component名 | Listener名 |
|---|---|
| Button | ActionListener |
| Checkbox | ItemListener |
| Choice | ItemListener |
| List | ItemListener, ActionListener |
| TextField | TextListener, ActionListener |
| TextField | TextListener |
| Scrollbar | AdjustmentListener |
イベント処理を行うには上のメソッドをどこかで一度呼び出しておく必要が あります。アプレットの場合なら、init()メソッドの中が適当でしょう。
Listenerはコンポーネントの機能を分離して別のクラスに組み込むことを 本来の目的としています。 しかし、コンポーネントのクラスにイベント処理を行わせてもかまいません。 たとえばアプレットのクラスの中で処理を完結させたいような場合には、 次のようにすることも可能です。
public class NewApplet extends Applet implements MouseListener {
public void init(){
addMouseListener( this ); // 自分自身を登録
:
:
Adapterクラス群は、それぞれの対応する Listenerのメソッドを
形式的に実装したクラスです。
Adapterの各クラスはすべて Objectクラスの直接のサブクラスで、
何か特別な機能があるわけではありません。
原理的には、Adapterクラスは使用しないでも Listenerのメソッドを
直接実装すれば同じことですが、
Adapterクラスを継承する形でイベント処理専用のクラスを設計すれば、
プログラムの記述が簡潔になり見やすくなります。