[解決済み] MenuListenerの実装、どのJMenuがクリックされたかを検出する方法は?
2022-02-18 15:32:17
質問
を定義した場合
JMenu
と
JMenuBar
このように
private JMenuBar jMenuBar;
private JMenu jMenu1;
jMenuBar = new JMenuBar();
jMenu1 = new JMenu();
jMenu1.setText("ABOUT");
//and here add a MenuListener so that i can detect when a menu is clicked:
jMenu1.addMenuListener(this);
jMenuBar.add(jMenu1);
setJMenuBar(jMenuBar);
//and here i implement the menulisteners
public void menuSelected(MenuEvent e) {
//my logic here
}
public void menuDeselected(MenuEvent e) {}
public void menuCanceled(MenuEvent e) {}
これで正常に動作するようになりました。しかし、問題は、複数のメニューがある場合、どのように2つを区別するかです。 メニューリスナーで、クリックがメニュー1から来たのか、それとも別のメニュー2から来たのか、どうすればわかるのでしょうか?
つまり、別のメニューがあり、このメニューにもメニューリスナーを追加した場合です。
jMenu2.addMenuListener(this);
をクリックすると、どのメニューからクリックされたのか区別がつきません。どうすればよいのでしょうか?
解決方法は?
を使用することができます。
getSource()
のメソッドを使用します。
メニューイベント
クラスがあります。あるいは、匿名クラスとして、両方のメニューに別々のリスナーを追加することもできます。
public void menuSelected(MenuEvent e) {
//Make sure jMenu1 and jMenu2 are accessible in here.
if(e.getSource()==jMenu1)
operationForMenu1();
else if(e.getSource()==jMenu2)
operationForMenu2();
}
または
jMenu1.addMenuListener(new MenuListener() {
@Override
public void menuSelected(MenuEvent arg0) {
// operation here.
}
@Override
public void menuDeselected(MenuEvent arg0) {
}
@Override
public void menuCanceled(MenuEvent arg0) {
}
});
jMenu2.addMenuListener(new MenuListener() {
@Override
public void menuSelected(MenuEvent arg0) {
// operation here.
}
@Override
public void menuDeselected(MenuEvent arg0) {
}
@Override
public void menuCanceled(MenuEvent arg0) {
}
});
2番目のオプションを選択すると、簡単に使用することができます。
(コメントで @Kleopatra が提案したように、これを削除しました。)
ActionListener
の代わりに
MenuListener
. (menuCanceled と menuDeselected に対して操作を行いたくない場合のみ)。
関連
-
[解決済み】Hibernateエラー:同じ識別子値を持つ別のオブジェクトがすでにセッションに関連付けられました。
-
[解決済み】エラー:配列または java.lang.Iterable のインスタンスに対してのみ反復処理を行うことができます。
-
[解決済み】このコンパイルユニットは名前付きモジュールに関連しているため、名前付きパッケージeclipseを宣言する必要があります。
-
[解決済み】"比較メソッドはその一般契約に違反する!"
-
[解決済み】"|="の意味は何ですか?(パイプ等号演算子)
-
[解決済み】Javaの部分文字列:「文字列のインデックスが範囲外」。
-
[解決済み】Javaで無限大を実装する方法とは?
-
[解決済み】Javaメソッドスタブ
-
[解決済み] [Solved] java.lang.NoClassDefFoundError: クラスXXXを初期化できませんでした。
-
[解決済み] 整数の平方根が整数であるかどうかを判断する最速の方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】エラー。Selection does not contain a main type
-
[解決済み】不正な反射的アクセスとは?
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み】-XX:MaxPermSizeは何をするのですか?
-
[解決済み] メソッドがそのスーパークラスのメソッドをオーバーライドしない
-
[解決済み】Java Error "Exception in thread "main" java.util.InputMismatchException" Array プログラムで発生。
-
[解決済み】Javaのswitch文。定数式が必要だが、定数である
-
[解決済み】どういう意味か。Serializableクラスがstatic final serialVersionUIDフィールドを宣言していないとは?重複している] [重複している] [重複している] [重複している
-
[解決済み】Java: GZIPInputStreamの作成に失敗しました。GZIP形式ではありません
-
[解決済み】koch snowflake java recursion