繁体   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