next up previous
: 演習 : イベントの取り扱い : 演習

アダプタの利用

さて,リスナーを実装するたびに利用しない複数のメソッドまで記述しなくてはならいの は手間と言えるだろう. この問題を解決する方法としてリスナーに対応した アダプタというクラスがある.

アダプタは対応するリスナーのメソッドを全て空のメソッドで実装したクラスであり,こ れを拡張( extends)して,必要なメソッドだけをオーバーライドすることでイベ ントを処理することができる[*]

上のお絵かきプログラムをアダプタを利用して書き換えてみよう. この場合,利用している二つのリスナー( MouseListenerおよび MouseMotionListener)に対応したアダプタを拡張したクラスが必要となるため,クラス は全部で3つとなる. ここでは Scribble2 MyMouseListener MyMouseMotionListenerとい う名前とした. 以下にプログラムを示す.

  1. Scribble2クラス

    これはアプレット本体のクラスである. プログラムは init()メソッドのみからなっており,特に難しいところはないだろう.


    \begin{boxedminipage}{15cm}
\begin{alltt}
\relax{}
\\ 1: import java.applet.*;
...
...nListener(mml);
\\ 14: \}
\\ 15: \}
\\
\\ \relax \end{alltt}\end{boxedminipage}

    9,10行目
    二つのリスナーに対応したアダプタのインスタンスを生成する.
    12,13行目
    このインスタンスを,アプレットにおいて発生したイベントの受け取 り人として登録する.

  2. MyMouseListenerクラス

    これは MouseListenerに対応するクラスで, MouseAdapterクラスを拡張して 作成されている.


    \begin{boxedminipage}{15cm}
\begin{verbatim}1: import java.applet.*;
2: impo...
... e.getX();
14: sc.ly = e.getY();
15: }
16: }\end{verbatim}\end{boxedminipage}

  3. MyMouseMotionListenerクラス

    これも MyMouseListenerクラスと同様で, MouseMotionAdapterクラスを拡張 して作成されている.


    \begin{boxedminipage}{15cm}
\begin{verbatim}1: import java.applet.*;
2: impo...
...;
17: sc.lx = x;
18: sc.ly = y;
19: }
20: }\end{verbatim}\end{boxedminipage}

上記のアダプタを用いたプログラムは,記述が簡単になり見通しがよくなる一方で,以下 のような問題点がある.

これを解決するための方法としてJava1.1から導入された 内部クラスを利用するこ とができる.



U-GM\murao 平成14年7月5日