注: このイベント例を表示するには、HotJava などの JDK 1.1 対応のブラウザや JDK アプレットビューアが必要です。例がうまく実行できないときは、ここをクリックしてください。
このコードは、JavaOne の 「AWT Advanced Tutorial」/a>の中で、Hans Muller が行なった JDK 1.1 でのイベント処理に関する説明で使用されたものです。
注: 次のアプレットは JDK 1.1 コードを前提としています。1.0 ベースのブラウザでは実行しないでください。最新の JDK アプレットビューアまたは HotJava で実行できます。
匿名クラスを使ってイベントリスナーを実装する
ゲーム画面の下部にある赤い箱の背景のパネルは MouseMotion
イベントを処理しているので、箱はマウスの動きを追跡します。ハンドラは、MouseMotionListener を実装する匿名クラスです。
ネストした static クラスを使ってイベントリスナーを実装する
ゲーム画面上部にある箱の列 (ターゲット) は、パネルです。各パネルへの enter/exit イベントを処理するリスナーを追加することにより、マウスがパネル上を通過したときにパネルを強調表示にすることができます。ここで、これまでは enter/exit イベントを処理するために、static リスナークラスのインスタンスを使用していました。ところが、これにはバグがあります。赤い箱がマウスを正確に追跡しなくなるのです。
イベントを別のコンポーネントに再ディスパッチする
ターゲットのパネルは、ゲームパネルに送信されるべき MouseMotion イベントを消費 (および廃棄) してしまいます。イベントを再ディスパッチするために、座標を、パネルを原点とする座標に変換して、dispatchEvent()
とともに渡します。
Complete Example
列の中の箱の数だけマウスをクリックすると、正解のブザーが鳴って箱が消えます。パネル全体をクリアすると、ゲーム終了です。このゲームを 2 回以上実行できる場合には、すぐに専門技術者に相談してください。
Hans Muller
最終更新日: 12 月 8 日 (水) 20:12 PST