2009-12-14 42 views
0

我有一個JTree,當我右鍵單擊JTree中的節點時顯示JPopupMenu。基於JTree中選擇的節點,在我的JPopupMenu中隱藏/顯示或啓用/禁用某些JMenuItems的最佳方法是什麼?基於JTree的選擇在JPopupMenu中顯示/隱藏JMenuItems

想到的第一個解決方案是將「TreeSelectionListener」添加到JTree中的「值已更改」事件。在事件處理代碼中,我將使用TreeSelectionEvent的getNewLeadSelectionPath()方法來獲取最近選擇的路徑,並使用生成的TreePath對象的getLastPathComponent()來獲取選定的節點。從這裏我將有一系列的IF語句訪問我的JPopupMenu對象,並執行必要的修改以隱藏/顯示特定的JMenuItems。

然而,這件事情讓人覺得很失落,所以我決定我會問是否有更好的方法。

回答

1

我選擇在我自己的應用程序中解決這個問題的方法是使用DefaultMutableTreeNode類的「userObject」屬性,該類允許您隨存儲節點一起存儲所需的任何數據。我有許多類型的東西,它們都是從定義了「createPopupMenu()」方法的抽象基類中擴展而來的。然後,在選擇監聽器中(就像你在你的問題中所描述的那樣),我得到用戶對象並要求它創建一個適合於所選對象的彈出式菜單並顯示它。

1

獲取選定的樹節點非常簡單,應該按照您所描述的那樣工作。要修改彈出菜單,我建議使用Action s。這樣你就不必修改你的實況菜單,也可以添加例如一個JToolBar,其中包含的操作與菜單中的項目具有相同的操作方式。

相關問題