ユーザインタフェース 8章 基本的なコンポ−ネント2
8.2. java.awt.event.MouseListener
通常、ポップアップメニューは特定の領域でマウスが右クリックされた場合などに表示されます。それをJavaではどのように実現したら良いでしょうか?
「MouseListener」インタフェースを利用します。例えばパネル上で発生したマウスイベントを全て拾いたい場合は以下のようにします。
panel.addMouseListener(mouseEventHandler);
引数には「MouseListener」インタフェースを実装したクラスのインスタンスを指定します。「MouseListener」インタフェースには5つのメソッドが定義されており、それぞれが特定のマウスイベントに対応するようになっています。例えば「mouseExit」は、コンポーネントからマウスが出ると呼び出されます。
しかし1つ面倒な事があります。インタフェースを実装するクラスは、インタフェースで定義されているメソッドを全て実装しなければなりません。「MouseListener」の場合は5つのメソッドが定義されているので、それら全てを定義しなければならないことになります。1つしか必要の無いときに全部を実装するのは、非常に面倒な作業です。
Javaではそれを解決するため、「MouseAdapter」クラスを用意しています。「MouseAdapter」クラスは「MouseListener」インタフェースを実装しているクラスですが、その中では何の処理もしません。ユーザーがこの「MouseAdapter」クラスを拡張し、必要なメソッドだけをオーバーライドすれば良いように提供しているものです。
(実習課題2)
以下のサンプルプログラムを実装しなさい。
- ウィンドウに含まれるコンポーネントはパネル(JPanel)のみ。
- パネル上でクリックしたら、ポップアップメニューが表示されるようにする。
- クリックした場所にポップアップメニューを表示する事。
- ポップアップメニューの構成については任意。
- イベント処理は「MouseListener」インタフェースを実装したクラスで行う事。
(実習課題3)
実習課題2のプログラムを改良しなさい。
- イベント処理を「MouseAdapter」クラスを拡張したクラスで行うように変更する。
- ウィンドウを表示するクラスとイベント処理を行うクラスの2つで構成する事。