プロが教えるわが家の防犯対策術!

パネルを継承したクラスを作りました(パネルA)。
そのパネルAをメインフレームに作成しました。

作ったパネルAの上にサブパネルBを作りました。
サブパネルのイベントを書きたいのですがコードは作ったクラス内に書けないのでしょうか?

例)下記が作ったパネル継承クラスです。この中でpnlSubを作っているのです。で、このpnlSubのクリックイベントを書きたいのですが、どのようにイベントを用意すればよいのでしょう?

package ###

import java.awt.*;

public class PanelA extends Panel{
Image im;
Panel pnlSub = new Panel();

//CONSTRUCT
public PanelA(String img) {
im = Toolkit.getDefaultToolkit().getImage(img);

//MediaTracker画像入力監視
MediaTracker mt = new MediaTracker(this);
mt.addImage(im, 0);
try {
mt.waitForID(0);
}
catch (InterruptedException e) {
}

//パネル(pnlVolume)設定
this.add(pnlVolume, null);
pnlSub.setBackground(Color.red);
pnlSub.setBounds(new Rectangle(5, 8, 108, 5));

}

//Print
public void paint(Graphics g) {
if (g.drawImage(im, 0, 0, this) != true) {
System.out.println("ng");
}
}
}

A 回答 (2件)

よく会いますね(^^;



「直ぐに回答ほしいです」となっているので、直ぐに答えましょう。


1.マウスクリックをしたときに処理を行うクラス(この場合はPanelA)
 にMouseListenerインターフェースを実装させる。
  あるいは、MouseAdapterクラスを継承し必要なメソッドをオーバーライドする。
  (これは無名クラスでいいでしょう)

2.マウスクリックを発生させたいコンポーネントに対し、addMouseListenerを実行する。



コンストラクタで


pnlSub.addMouseListener( new MouseAdapter(){
                public void mouseClicked(MouseEvent e){
                  /* イベント処理
                   */
                }});

でいいと思いますよ。
    • good
    • 0
この回答へのお礼

>よく会いますね(^^;
ただ私が勉強不足なだけで、毎回ngsvxさんのご好意に甘えてしまい・・・。
そして今回も・・・ご回答ありがとうございます。

>MouseListenerインターフェースを実装させる。
 MouseAdapterクラスを継承し必要なメソッドをオーバー ライドする。

これはどういった意味なのでしょうか?
きっとngsvxさんが書いてくださったロジックを素直に書けばよいのだとは思いますが、理解しとかないと同じような質問をまたしてしまいそうで・・・
ngsvxの書いてくださったコンストラクタでのロジックが言わんとされていることでしょうか?

お礼日時:2003/05/16 16:03

>毎回ngsvxさんのご好意に甘えてしまい・・・。


そして今回も・・・ご回答ありがとうございます。

全然気にしてませんから、大丈夫ですよ。

ちょっと、時間がないので、手短に書いておきます。

addMouseListenerメソッドには、引数としMouseListener
インターフェースを渡します。

これは、「マウスイベントの聞き手」ということです。
これを実装したインスタンスは、マウスイベントを検知できます。

ただ、このインターフェースはメソッドの数が多いため、
全てを実装するのは面倒です(コードをたくさん書く)。

そのため、MouseAdapterというアダプタークラスを使います。
(もちろん、直接実装しても問題はありません)。

アダプタークラスというのは、インターフェースのメソッドを、全て空で実装してあるクラスなのです。

これを継承してあげれば、必要なメソッドだけを定義すればいいので楽だ、ということです。

詳しくは、参考書なりをご覧下さい。
これは、よくでてくることなので、しっかりとマスター
した方がいですよ。


今日は時間がないもので、とりあえずこれで失礼します。
    • good
    • 0
この回答へのお礼

毎回の事ながら、大変わかりやすいご説明ありがとうございました。
そして、教えていただいた通りちゃんとイベントが取れました!!!
多分、月曜日にも質問を出してしまうと思います。お時間があったらまたお願いします。

お礼日時:2003/05/16 19:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!