パネルを継承したクラスを作りました(パネル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");
}
}
}
No.1
- 回答日時:
よく会いますね(^^;
「直ぐに回答ほしいです」となっているので、直ぐに答えましょう。
1.マウスクリックをしたときに処理を行うクラス(この場合はPanelA)
にMouseListenerインターフェースを実装させる。
あるいは、MouseAdapterクラスを継承し必要なメソッドをオーバーライドする。
(これは無名クラスでいいでしょう)
2.マウスクリックを発生させたいコンポーネントに対し、addMouseListenerを実行する。
コンストラクタで
pnlSub.addMouseListener( new MouseAdapter(){
public void mouseClicked(MouseEvent e){
/* イベント処理
*/
}});
でいいと思いますよ。
>よく会いますね(^^;
ただ私が勉強不足なだけで、毎回ngsvxさんのご好意に甘えてしまい・・・。
そして今回も・・・ご回答ありがとうございます。
>MouseListenerインターフェースを実装させる。
MouseAdapterクラスを継承し必要なメソッドをオーバー ライドする。
これはどういった意味なのでしょうか?
きっとngsvxさんが書いてくださったロジックを素直に書けばよいのだとは思いますが、理解しとかないと同じような質問をまたしてしまいそうで・・・
ngsvxの書いてくださったコンストラクタでのロジックが言わんとされていることでしょうか?
No.2ベストアンサー
- 回答日時:
>毎回ngsvxさんのご好意に甘えてしまい・・・。
そして今回も・・・ご回答ありがとうございます。
全然気にしてませんから、大丈夫ですよ。
ちょっと、時間がないので、手短に書いておきます。
addMouseListenerメソッドには、引数としMouseListener
インターフェースを渡します。
これは、「マウスイベントの聞き手」ということです。
これを実装したインスタンスは、マウスイベントを検知できます。
ただ、このインターフェースはメソッドの数が多いため、
全てを実装するのは面倒です(コードをたくさん書く)。
そのため、MouseAdapterというアダプタークラスを使います。
(もちろん、直接実装しても問題はありません)。
アダプタークラスというのは、インターフェースのメソッドを、全て空で実装してあるクラスなのです。
これを継承してあげれば、必要なメソッドだけを定義すればいいので楽だ、ということです。
詳しくは、参考書なりをご覧下さい。
これは、よくでてくることなので、しっかりとマスター
した方がいですよ。
今日は時間がないもので、とりあえずこれで失礼します。
毎回の事ながら、大変わかりやすいご説明ありがとうございました。
そして、教えていただいた通りちゃんとイベントが取れました!!!
多分、月曜日にも質問を出してしまうと思います。お時間があったらまたお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- Java java final 1 2022/06/10 22:49
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- YouTube youtubeは画面と操作パネルが別々に表示されていたのに画面上にかぶるように表示されるようになった 1 2022/05/08 10:04
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- その他(プログラミング・Web制作) pythonで、tkinterとpillowの組み合わせ 2 2022/08/16 17:42
- DIY・エクステリア ルミナスのラックで、ストーブガードを自作したいが、熱くはならない? 1 2023/02/18 18:18
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
interface,extend,implementの...
-
Javaのインスタンス化の構文の...
-
Excel vbaのプログラムでガンマ...
-
抽象クラスをJUNITでテストする...
-
プログラムの組み立てについて
-
ASP.NETでの共通コードの書き方...
-
C# 「データが失なわれる可能性...
-
Javaの自作例外クラスについて
-
javaでクッキー認証を必要とす...
-
インターフェースの利点は?
-
インターフェースとは
-
Javaコレクションフレームワー...
-
「ラッパークラス」の存在意義...
-
Javaでタスクシステムを作るの...
-
メソッドの引数にクラス名を渡す
-
抽象クラスとインターフェース...
-
オブジェクト指向 ボールの衝突
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
インスタンス参照でアクセスで...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
interface,extend,implementの...
-
(vba)他のアプリケーションの右...
-
抽象クラスをJUNITでテストする...
-
「ラッパークラス」の存在意義...
-
ASP.NETでの共通コードの書き方...
-
JTextFieldの入力制限
-
「継承されたメソッドの可視性...
-
C# 「データが失なわれる可能性...
-
VB DLLプロジェクトについて
-
c++でのヘッダーファイルの循環...
-
【C#】クラスのコンストラクタ...
-
「IOException は対応する try ...
-
ファイルパスが取得出来ない(P...
-
メソッドの引数にクラス名を渡す
-
ゲッターを使わないで変数にア...
-
Javaのインスタンス化の構文の...
-
オーバーライドとラッパーの違い
-
vb.net 自作プロパティの削除に...
-
なぜインタフェースを使うのか?
-
VBがオブジェクト指向言語でな...
おすすめ情報