0

JTreeのノードを右クリックするとJPopupMenuを表示するJTreeがあります。JTreeで選択したノードに基づいて、JPopupMenuの特定のJMenuItemを非表示/表示または有効化/無効化するための最良の方法は何ですか?

頭に浮かんだ最初の解決策は、「値が変更された」イベントのJTreeにTreeSelectionListenerを追加することでした。イベント処理コードでは、TreeSelectionEventのgetNewLeadSelectionPath()メソッドを使用して最新の選択のパスを取得し、結果のTreePathオブジェクトのgetLastPathComponent()を使用して選択したノードを取得します。ここから、JPopupMenuオブジェクトにアクセスし、特定のJMenuItemを非表示/表示するために必要な変更を実行する一連のIFステートメントを作成します。

しかし、これには何か気がかりなことがあるので、もっと良いアプローチがあるかどうかSOに尋ねることにしました。

4

2 に答える 2

1

選択したツリーノードの取得は簡単で、説明したとおりに機能するはずです。ポップアップメニューを変更するには、アクションを使用することをお勧めします。このように、ライブメニューを変更する必要はなく、メニュー内のアイテムと同じように反応する同じアクションを含むJToolBarなどを追加することもできます。

于 2009-12-14T21:32:37.223 に答える
1

私が自分のアプリ内でこれに取り組むことを選択した方法は、DefaultMutableTreeNodeクラスの「userObject」プロパティを使用することでした。これにより、必要なデータをノードと一緒に保存できます。「createPopupMenu()」メソッドを定義する抽象基本クラスから拡張されたさまざまなタイプのものがあります。次に、選択リスナーで(質問で説明したように)ユーザーオブジェクトを取得し、選択したオブジェクトに適したポップアップメニューを作成して表示するように依頼します。

于 2009-12-14T21:35:39.527 に答える