我正在定製一個封閉的源客戶端應用程序。它在UI中有一棵樹,並且只公開了一種獲取選定節點的方法。它返回TreeNode的一個子類。並且沒有辦法獲得對父樹的引用。現在我想將選定的節點擴展到它的葉子。Java Swing:擴展TreeNode
有什麼辦法從DefaultMutableTreeNode獲取對JTree組件的引用嗎?我打算使用JTree.expandPath(),但我只有對treenode的引用。
我是Swing的新手,任何有關實現此目標的建議都是值得歡迎的。
我正在定製一個封閉的源客戶端應用程序。它在UI中有一棵樹,並且只公開了一種獲取選定節點的方法。它返回TreeNode的一個子類。並且沒有辦法獲得對父樹的引用。現在我想將選定的節點擴展到它的葉子。Java Swing:擴展TreeNode
有什麼辦法從DefaultMutableTreeNode獲取對JTree組件的引用嗎?我打算使用JTree.expandPath(),但我只有對treenode的引用。
我是Swing的新手,任何有關實現此目標的建議都是值得歡迎的。
實際上,只有JTree知道擴展狀態,TreeNodes中沒有這樣的信息。 TreeNodes位於"model"一側,並且在JTree上沒有指針(至少不是默認指針,當然,您可以使用引用來創建自己的指針,但它會打破一些模式)。
你應該重新考慮一下你想在哪個地方進行擴展,以便你可以訪問JTree(提供更多關於你的上下文的細節,知道更多你想做什麼以及在哪些情況下) 。
縱觀源DefaultMutableTreeNode
,我看不出有什麼好的辦法做到這一點,但你可以嘗試以下操作之一:
DefaultMutableTreeNode
和參考存儲你的樹toString()
中),以這種方式設置用戶對象將會大肆宣傳API的預期用途。所以:討厭,但可能會奏效。樹節點是來自樹模型的元素。因此,它沒有任何提及它的觀點的樹。
有趣的是知道你是哪個對象:既然你想對鼠標事件做出反應,我想你可以訪問視圖層(至少通過獲取源自MouseEvent的組件,它應該成爲JTree)。如果是這樣,你可以得到選定的行並致電expandPath。從DefaultMutableTreeNode構建TreePath留作練習:-)
編輯從下面的評論,讓我澄清我的答案。 您必須致電expandPath使用TreePath,通過簡單地在DefaultMutableTreeNode上調用getPath生成。
我正在定製一個封閉的源客戶端應用程序。它在UI中有一棵樹,並且只公開了一種獲取選定節點的方法。它返回TreeNode的一個子類。並且沒有辦法獲得對父樹的引用。現在我想將選定的節點擴展到它的葉子。 – 2010-04-12 13:34:16
@sarav - 在這種情況下,我恐怕你運氣不好。如果您沒有任何其他訪問權限而不是TreeNodes,則無法控制JTree的擴展狀態。如果你可以訪問頂層窗口/組件(或者同一個窗口中的任何組件),並且確信它的結構是靜態的,你可以通過一種非常骯髒的方式來實現它。 JTree從那裏。 – Gnoupi 2010-04-12 13:46:46
@sarav - (快速記下,考慮用這些新的細節編輯你的問題,讓大家更清楚地看到整個情況) – Gnoupi 2010-04-12 13:50:52