- ベストアンサー
作ったクラスにイベントを追加するには?
- 作ったクラスにイベントを追加する方法について教えてください。
- パネルを継承したクラスを作成し、その中でサブパネルのイベントを書きたいですが、どのようにすればよいでしょうか?
- 具体的なコード例とともに説明してください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
>毎回ngsvxさんのご好意に甘えてしまい・・・。 そして今回も・・・ご回答ありがとうございます。 全然気にしてませんから、大丈夫ですよ。 ちょっと、時間がないので、手短に書いておきます。 addMouseListenerメソッドには、引数としMouseListener インターフェースを渡します。 これは、「マウスイベントの聞き手」ということです。 これを実装したインスタンスは、マウスイベントを検知できます。 ただ、このインターフェースはメソッドの数が多いため、 全てを実装するのは面倒です(コードをたくさん書く)。 そのため、MouseAdapterというアダプタークラスを使います。 (もちろん、直接実装しても問題はありません)。 アダプタークラスというのは、インターフェースのメソッドを、全て空で実装してあるクラスなのです。 これを継承してあげれば、必要なメソッドだけを定義すればいいので楽だ、ということです。 詳しくは、参考書なりをご覧下さい。 これは、よくでてくることなので、しっかりとマスター した方がいですよ。 今日は時間がないもので、とりあえずこれで失礼します。
その他の回答 (1)
- ngsvx
- ベストアンサー率49% (157/315)
よく会いますね(^^; 「直ぐに回答ほしいです」となっているので、直ぐに答えましょう。 1.マウスクリックをしたときに処理を行うクラス(この場合はPanelA) にMouseListenerインターフェースを実装させる。 あるいは、MouseAdapterクラスを継承し必要なメソッドをオーバーライドする。 (これは無名クラスでいいでしょう) 2.マウスクリックを発生させたいコンポーネントに対し、addMouseListenerを実行する。 コンストラクタで pnlSub.addMouseListener( new MouseAdapter(){ public void mouseClicked(MouseEvent e){ /* イベント処理 */ }}); でいいと思いますよ。
お礼
>よく会いますね(^^; ただ私が勉強不足なだけで、毎回ngsvxさんのご好意に甘えてしまい・・・。 そして今回も・・・ご回答ありがとうございます。 >MouseListenerインターフェースを実装させる。 MouseAdapterクラスを継承し必要なメソッドをオーバー ライドする。 これはどういった意味なのでしょうか? きっとngsvxさんが書いてくださったロジックを素直に書けばよいのだとは思いますが、理解しとかないと同じような質問をまたしてしまいそうで・・・ ngsvxの書いてくださったコンストラクタでのロジックが言わんとされていることでしょうか?
お礼
毎回の事ながら、大変わかりやすいご説明ありがとうございました。 そして、教えていただいた通りちゃんとイベントが取れました!!! 多分、月曜日にも質問を出してしまうと思います。お時間があったらまたお願いします。