No.6ベストアンサー
- 回答日時:
>ということは、私は子パネルでイベントを取得して子パネルのリスナで親パネルのメソッドを呼ぶばよいのでしょうか?
いいと思います。
ついでながら複数の子パネルからイベントを受け取る場合、
どのパネルからのメソッドか判別する処理が必要になるかもしれませんが、
その場合は下記質問を参照ください。
参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=530269
お答えありがとうございました。
>ついでながら複数の子パネルからイベントを受け取る場合、
どのパネルからのメソッドか判別する処理が必要になるかもしれませんが、
その場合は下記質問を参照ください。
実は考えていました・・・
本当にありがとうございました。
No.5
- 回答日時:
>すみません、私が未熟なものでliar_adanさんの話についていけていません・・・
いえ、こちらこそすみません。
書いているあいだ、自分でも
「わかりにくい文章だなあ…」と思ってました。
(そのまま書いちゃいけませんね)
AWTのイベントモデルでは、
コンポーネント(Panelも含む)にリスナを、addXXXListener()で加えて
イベントを受け取る仕掛けになっています。
ユーザーからのイベント(マウスを押したとか)を
受け取るのはコンポーネントなのですが、
イベントはコンポーネントを素通りして、リスナに渡されます。
この間、コンポーネントができることはあまりありません。
イベントが起こる場合には、コンポーネントより
リスナの方に注目すべきなのです。
たとえばMouseListenerを子パネルに追加するときは
class KoPanelMouseListener implements MouseLisntner{
void mouseClicked(MouseEvent e){...}
....
}
...
KoPanel koPanel = new KoPanel();
KoPanelMouseListener listener = new KoPanelMouseListener();
koPanel.addMouseListener(listener);
という風になります。
イベントが起こったときに起動されるのは、
この場合ではKoPanelMouseListenerの中の
mouseClicked()等のメソッドです。
コンポーネントの中のメソッドは起動されません。
だから、最終的に使いたいメソッドがどこにあろうとも、
リスナの中でそれを起動すればいいわけです。
#注意
上記の文はJDK1.1以降のイベントモデルを使っています。
それ以前は継承ベースのイベントモデルもありました。
これについては詳しくないのでよくわかりません。
度度々ご回答ありがとうございました。
リスナとイベントの関係、非常にわかりやすく教えていただきありがとうございました。
ということは、私は子パネルでイベントを取得して子パネルのリスナで親パネルのメソッドを呼ぶばよいのでしょうか?
No.4
- 回答日時:
>implementsとはどのような働きをするのですか?
たとえ話になりますが…
extendsとimplementsは、似た働きをします。
extendsで他のクラスを「継承」しますが、
implementsはインタフェースを「実装」します。
実装というのは、免許証みたいなものです。
XXインタフェースを実装していれば、
そのクラスはXXインタフェースとしての働きをできるわけです。
パネルに、たとえばMouseListenerをimplementsすれば、
MouseListenerとしての働きができるクラスが作れます。
ところで、#3さんの方法について気になることがあります。
1つは、イベントを受け取るときはリスナを登録する必要があるので、
親パネルを継承しても、結局、間にリスナが入ります。
イベントの流れとしては
子パネルのイベント発生→イベントがリスナに伝わる→リスナ内のメソッドが起動。
という順番になります。
親パネルを継承しても、イベント発生時に直接、
親パネルのメソッドを呼び出すことは困難だと思います。
第二に、「親パネルを継承してそのメソッドを起動する」やり方だと、
そのメソッドが非常に単純なものならいいですが、
親パネルのフィールドを使うことはできません。
(オブジェクトとして違うので)
私としては親パネルを継承してもあまりメリットはないように思います。
度々のお答えありがとうございました。
先日のお答えで下記のようにありましたが、親パネルのメソッドは子パネル内で発行できるのでしょうか?
*********************************************
class OyaPanel extends Panel implements XXXListener{
...
}
Panel koPanel = new Panel();
koPanel.addXXXListener(oyaPanel);
*********************************************
もう少し例文を具体的に書いていただくと助かります。
すみません、私が未熟なものでliar_adanさんの話についていけていません・・・
No.3
- 回答日時:
No.1のものです。
親パネル・・・ParentPanel
子パネル・・・ChildPanel
というクラスだとします。
親パネルは
class ParentPanel extends Panel{
・・・中省略・・・
}
Panelを継承してますよね。
それで子パネルで親パネルを継承します。
class ChildPanel extends ParentPanel{
・・・中省略・・・
}
するとこれらの関係は
Panel→継承→ParentPanel→継承→ChildPanel
という形での多重継承です。
これで子パネルはPanelクラスとParentPanelクラスの両方のメソッドを使用できます。
度々のご回答ありがとうございました。
親パネルは
*******************************************
class ParentPanel extends Panel{
・・・中省略・・・
}
Panelを継承してますよね。
それで子パネルで親パネルを継承します。
class ChildPanel extends ParentPanel{
・・・中省略・・・
}
*******************************************
とのことですが現在子パネルもPanelを継承しているのです。
class ChildPanel extends Panel{
・・・中省略・・・
}
とすると親パネル継承するにはどのように書けばよいのですか?
No.2
- 回答日時:
子パネルに与えるイベントリスナに、親パネルの参照を保持しておいて、
そのメソッドを起動するといいと思います。
つまり 子パネル→リスナ→親パネル との段階です。
場合によっては、親パネルを継承するときイベントリスナも実装して、
子パネルに自分自身を与える。というやり方もあります。
class OyaPanel extends Panel implements XXXListener{
...
}
Panel koPanel = new Panel();
koPanel.addXXXListener(oyaPanel);
こうすると、クラスの総数が減らせる利点があります。
(それほどの利点ではありませんが)
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- DIY・エクステリア ルミナスのラックで、ストーブガードを自作したいが、熱くはならない? 1 2023/02/18 18:18
- 車検・修理・メンテナンス 車から外されている単体の車用12vバッテリー端子に繋いで、太陽光発電パネルから充電できるような、バッ 7 2022/12/25 10:11
- ノートパソコン 【IGZOパネル】IGZOディスプレイを採用したノートパソコンを教えてください。 I 1 2023/07/11 19:58
- モニター・ディスプレイ TNパネル、IPSパネル、ADSパネルの画質や色味はかなり違いますか?気にならない程度ですか? 3 2023/01/02 20:02
- YouTube youtubeは画面と操作パネルが別々に表示されていたのに画面上にかぶるように表示されるようになった 1 2022/05/08 10:04
- モニター・ディスプレイ モンハンなどのアクションゲームをするならTNパネルとIPSパネルどちらが良いですか? 6 2023/01/01 20:43
- その他(法律) イラストの著作権についてです。 フラワースタンドのパネル用のイラストを私がとある絵師様に依頼しました 1 2023/05/28 00:26
- エアコン・クーラー・冷暖房機 エアコンのフィルターを掃除するの流行ってますか、パネルをわざわざ外して洗うのは冷房効率に効果あるので 8 2022/05/29 14:00
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- 環境・エネルギー資源 太陽光発電は2014年まで補助金制度があったそうですが、太陽光発電を国が推奨していたのでしょうか? 5 2023/02/25 18:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB.NETでフォーム上にExcelのよ...
-
画像を一瞬だけ表示する。
-
C#で設定時刻到来時にイベント...
-
ファイル保存先のダイアログが...
-
JScrollPane上のJTableの再描画
-
VB6のツールボックスへのコンポ...
-
JTableのカラム移動の抑止方法
-
requestFocusについて
-
パネルのフォーカス移動
-
変数名の付け方
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
Java初級 引数に適用できません
-
インスタンス参照でアクセスで...
-
グローバルIPとプライベートIP...
-
パワーポイントのVBAでテキスト...
-
複数の変数を宣言する時、同時...
-
コマンドプロンプト実行後に画...
-
private static という変数の修飾
-
VB.netでメソッドからコントロ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB.NETでフォーム上にExcelのよ...
-
VB.NETでMSComm が追加できず?
-
ファイル保存先のダイアログが...
-
requestFocusについて
-
Visual Basic 2010を使ってRS-2...
-
ツールボックスのような折りたたみ
-
C#で設定時刻到来時にイベント...
-
[delphi] 変数を利用してコンポ...
-
java gui のイベント処理が重い
-
VBSでCDトレイのオープン/ク...
-
ゲーム画面(JFrame)のサイズ変...
-
VS2010デザイナーの読込エラー...
-
コンポーネント
-
delphi stringgrid
-
borland C++ Builder 6でSPComm...
-
JScrollPane上のJTableの再描画
-
画像を一瞬だけ表示する。
-
パネルのフォーカス移動
-
フレーム上のコンポーネントの...
-
アクティブなTextFiel...
おすすめ情報