next up previous
: 演習 : イベントの取り扱い : イベントとリスナーのクラス

イベント処理のプログラム例

実際の利用法を見たほうが良いだろう. 次に簡単なお絵かきソフトのプログラムを示す.


\begin{boxedminipage}{15cm}
\begin{alltt}
\relax{}
\\ 1: import java.applet.*;
...
...eMoved(MouseEvent e) \{\}
\\ 42: \}
\\
\\ \relax \end{alltt}\end{boxedminipage}

以下,解説.

6行目
MouseListener MouseMotionListenerのインターフェイスの 実装を宣言している.これにより,この Scribbleクラスがこれらのリスナーに対応 するイベントの取得を行えることになる.

10,11行目
イベントのリスナーが自分自身( this)であることを, イベント監視スレッドに登録する. X というイベントに関するリスナーの登録は,以下のような形式で行う.


\begin{boxedminipage}{15cm}
\begin{verbatim}イベントを発生するオブジェクト.addXListner(イベントのリスナー)\end{verbatim}\end{boxedminipage}

ここでは Appletクラスそのものがマウスに関するイベントを発生するので,「イベ ントを発生するオブジェクト」も「イベントのリスナー」もそのアプレット自身( this)となっている.

この後の章で,AWTコンポーネントという,GUI部品の利用を行うが,これらの 部品はそれぞれ対応するイベントを発生することができる. 例えば Buttonクラスはユーザがボタンをクリックしたときに ActionEventを 発生し, Scrollbarクラスはユーザがスクロールバーを操作したときに AdjustmentEventを発生する. これらについては後ほど紹介する.

16行目
MouseListenerインターフェイスのメソッドである mousePressed()メソッドの実装を行っている. ここで分かるように,リスナーのメソッドには,対応するイベントクラスのインスタンス が引数として渡される(この場合は MouseEventクラスのインスタンス). メソッド内では,これを用いてイベントの処理を行うことができる.

34〜41行目
MouseListenerおよび MouseMotionListenerは複数のメソッ ドを有するが,ここで利用するメソッドは mousePressed() mouseDragged() のみである. しかし,これらのメソッドはすべて抽象メソッドとして宣言されているので,利用しない メソッドについてもこのように空のメソッドとして実装する必要がある.

これはJava1.1におけるイベント処理において若干煩雑なところであるが,次に述べる アダプタを利用することで解消することができる.



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