簡體   English   中英

Java Swing:擴展TreeNode

[英]Java Swing: Expanding TreeNode

我正在自定義封閉源客戶端應用程序。 它在用戶界面中有一棵樹,並且僅公開了一種獲取所選節點的方法。 它返回TreeNode的子類。 而且沒有辦法獲得對父樹的引用。 現在,我想將所選節點擴展到其葉子。

有什么方法可以從DefaultMutableTreeNode獲取對JTree組件的引用嗎? 我打算使用JTree.expandPath(),但僅具有對treenode的引用。

我是Swing的新手,歡迎提出任何建議。

實際上,只有JTree知道擴展狀態,TreeNode中沒有此類信息。 TreeNode位於“模型”側,並且在JTree上沒有指針(至少不是默認指針),您當然可以使用引用創建自己的指針,但會破壞模式。

您應該重新考慮要擴展到可以訪問JTree的位置的位置(可能提供有關上下文的更多詳細信息,以了解更多您想做的事情,以及在什么情況下)。

在查看DefaultMutableTreeNode的源代碼時,我看不到任何不錯的方法,但是您可以嘗試以下方法之一:

  • 擴展DefaultMutableTreeNode並存儲對樹的引用
  • 默認節點具有“用戶對象”的概念。 可以將對樹的引用設置為此對象。 這是完全非類型安全的,但可能會起作用。 編輯:實際上,仔細查看用戶對象的使用方式(作為樹路徑和toString()的文本表示形式),以這種方式設置用戶對象將破壞API的預期用途。 所以:令人討厭,但可能會起作用。

樹節點是樹模型中的元素。 因此,它沒有對作為其視圖的樹的任何引用。

有趣的是知道您在哪個對象中:由於您想對鼠標事件做出反應,因此我想您可以訪問視圖層(至少通過取回起源於MouseEvent的組件(應該是JTree)) 。 如果是這樣,您可以獲取選定的行並調用expandPath 從DefaultMutableTreeNode構建TreePath作為練習:-)

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM