2010-04-12 133 views
2

我正在定製一個封閉的源客戶端應用程序。它在UI中有一棵樹,並且只公開了一種獲取選定節點的方法。它返回TreeNode的一個子類。並且沒有辦法獲得對父樹的引用。現在我想將選定的節點擴展到它的葉子。Java Swing:擴展TreeNode

有什麼辦法從DefaultMutableTreeNode獲取對JTree組件的引用嗎?我打算使用JTree.expandPath(),但我只有對treenode的引用。

我是Swing的新手,任何有關實現此目標的建議都是值得歡迎的。

回答

5

實際上,只有JTree知道擴展狀態,TreeNodes中沒有這樣的信息。 TreeNodes位於"model"一側,並且在JTree上沒有指針(至少不是默認指針,當然,您可以使用引用來創建自己的指針,但它會打破一些模式)。

你應該重新考慮一下你想在哪個地方進行擴展,以便你可以訪問JTree(提供更多關於你的上下文的細節,知道更多你想做什麼以及在哪些情況下) 。

+1

我正在定製一個封閉的源客戶端應用程序。它在UI中有一棵樹,並且只公開了一種獲取選定節點的方法。它返回TreeNode的一個子類。並且沒有辦法獲得對父樹的引用。現在我想將選定的節點擴展到它的葉子。 – 2010-04-12 13:34:16

+0

@sarav - 在這種情況下,我恐怕你運氣不好。如果您沒有任何其他訪問權限而不是TreeNodes,則無法控制JTree的擴展狀態。如果你可以訪問頂層窗口/組件(或者同一個窗口中的任何組件),並且確信它的結構是靜態的,你可以通過一種非常骯髒的方式來實現它。 JTree從那裏。 – Gnoupi 2010-04-12 13:46:46

+0

@sarav - (快速記下,考慮用這些新的細節編輯你的問題,讓大家更清楚地看到整個情況) – Gnoupi 2010-04-12 13:50:52

1

縱觀源DefaultMutableTreeNode,我看不出有什麼好的辦法做到這一點,但你可以嘗試以下操作之一:

  • 擴展DefaultMutableTreeNode和參考存儲你的樹
  • 默認節點具有「用戶對象」的概念。你可能設置對這棵樹的引用作爲這個對象。這是完全不安全的,但可能會起作用。 編輯:實際上,仔細研究如何使用用戶對象(作爲樹形路徑的文本表示並在toString()中),以這種方式設置用戶對象將會大肆宣傳API的預期用途。所以:討厭,但可能會奏效。
0

樹節點是來自樹模型的元素。因此,它沒有任何提及它的觀點的樹。

有趣的是知道你是哪個對象:既然你想對鼠標事件做出反應,我想你可以訪問視圖層(至少通過獲取源自MouseEvent的組件,它應該成爲JTree)。如果是這樣,你可以得到選定的行並致電expandPath。從DefaultMutableTreeNode構建TreePath留作練習:-)

編輯從下面的評論,讓我澄清我的答案。 您必須致電expandPath使用TreePath,通過簡單地在DefaultMutableTreeNode上調用getPath生成。

+0

雖然我在他的問題中沒有看到對鼠標事件的引用。 – Gnoupi 2010-04-12 13:25:06

+1

如果它確實是爲了響應用戶點擊,'event.getSource()'可能是最好的選擇。 – Ash 2010-04-12 13:29:12