2017-09-26 15 views
0

ユーザがTestSuiteをクリックしてMenuItemを動的に追加したときにイベントをキャッチしたいと思います。ClickイベントハンドラをJMenuに追加する

JMenu menu5 = new JMenu("TestSuite"); 

Java Swingでこれを行う方法は? addActionListener(this)を追加することで、すべてのJMenuItemクリックイベントを捕捉できます。しかし、今回はJMenuItemではなく、JMenuです。

+0

(1-) 'ユーザーがTestSuiteをクリックしていくつかのMenuItemを動的に追加したとき' - これは貧弱な設計です。ユーザーが「いくつかのMenuItemを追加したい」とき、または単にポップアップメニューを表示したいときは、どのように知っていますか?おそらく、最初のメニュー項目は「追加...」メニュー項目でなければなりません。 – camickr

+0

これは完全に論理的な質問です。メニュー項目を「追加」するとは考えないでください。マーカスは、その時点で状態に基づいて押されるたびにメニューの内容を動的に作成したいと考えています。彼の「追加」の使用はおそらく問題の簡素化でした。 –

+0

@BillK、はいこれは合理的であるたびにメニューを完全に "再構築"しているかどうかわかります。いずれにしても、私のコメントは、「追加する」という上記の要求に向けられていました。 – camickr

答えて

-3

JButtonにイベントを追加するのと同じように、ActionListenerインターフェイスを使用できます。

menu5.addActionListener(this); 

ここで、 "this"は、上記のサンプルでActionListenerインターフェイスを実装しているクラスの参照です。同じクラスです。

あなたはmenu5.add(新しいのMenuItem(「メニューITEM1」))を使用することができ、メニューを追加する

+0

(1-)ActionListenerをJMenuItemに追加できますが、JMenuには追加できません。 – camickr

+0

あなたはどれくらい愚かですか?行って、java doc –

+1

'あなたはどれくらい愚かなのか確認してください。行って、javaのドキュメントをチェック ' - 私はより明確にすべきだと思います。 ActionListenerをJMenuに追加することはできますが、メニューをクリックするとリスナーは呼び出されません。これは、OPが質問している理由です。具体的には、JMenuItemでは動作したが、JMenuでは動作しないActionListenerが記述されていました。 – camickr

2

あなたはJMenuMenuListenerを追加し、menuSelectedイベントをリッスンすることができます。これにより、ポップアップが表示される前に、メニュー項目をメニューに動的に追加/削除することができます。

+0

アクセラレータキーを使用すると、マウスリスナーを追加すると失敗します。 –

+0

@BillKアクセラレータをメニューに追加することはできません。 "nmenomics"を意味すると思います。この場合、MenuListenerが呼び出されます。私が提案したように、実際の要件に基づいてソリューションを選択する必要があります。メニューはこのように使用するようには設計されていません。 – camickr

+0

多くのプログラムは、状態に基づいてメニュー項目を追加したり削除したりします。要件のセットに遭遇していないため、無効と見なすべきではありません。 –

関連する問題