Java Swing:扩展 TreeNode

Java Swing: Expanding TreeNode

我正在定制一个闭源客户端应用程序。它在 UI 中有一个树,并且只公开了一个获取所选节点的方法。它返回 TreeNode 的子类。并且没有办法获得对父树的引用。现在我想将选定的节点扩展到它的叶子。

有什么方法可以从 DefaultMutableTreeNode 获取对 JTree 组件的引用?我打算使用 JTree.expandPath() 但我只有对树节点的引用。

我是 Swing 新手,欢迎提出任何实现这一目标的建议。


其实只有JTree知道展开状态,TreeNodes中没有这样的信息。 TreeNodes 在"模型"一侧,并且在 JTree 上没有指针(至少不是默认的,您当然可以使用引用创建自己的,但它有点打破了模式)。

您应该重新考虑您想要进行此扩展的地方,以便您可以访问 JTree(提供有关您的上下文的更多详细信息,以了解更多您想要做什么以及在什么情况下)。


查看 DefaultMutableTreeNode 的源代码,我看不出有什么好的方法,但您可以尝试以下方法之一:

  • 扩展 DefaultMutableTreeNode 并存储对树的引用
  • 默认节点具有"用户对象"的概念。您可以将树的引用设置为此对象。它完全不是类型安全的,但可能会起作用。编辑:实际上,仔细研究用户对象的使用方式(作为树路径和 toString() 中的文本表示),以这种方式设置用户对象将破坏 API 的预期用途。所以:讨厌,但可能有效。

树节点是树模型中的一个元素。因此,它没有对作为其视图的 Tree 的任何引用。

有趣的是知道你在哪个对象中:因为你想对鼠标事件做出反应,我猜你可以访问视图层(至少通过取回发起 MouseEvent 的组件,这应该是J树)。如果是这样,您可以获取选定的行并调用 expandPath。从 DefaultMutableTreeNode 构建 TreePath 作为练习 :-)

编辑从下面的评论中,让我澄清我的答案。
您必须使用通过在 DefaultMutableTreeNode 上调用 getPath 生成的 TreePath 来调用 expandPath。