JavaSwing:扩展TreeNode

JavaSwing:扩展TreeNode,java,swing,Java,Swing,我正在定制一个封闭源代码的客户端应用程序。它在UI中有一个树,只公开了获取所选节点的方法。它返回TreeNode的一个子类。而且没有办法获得对父树的引用。现在,我想将所选节点扩展到其叶子 有没有办法从DefaultMutableTreeNode获取对JTree组件的引用?我计划使用JTree.expandPath(),但我只有对treenode的引用 我是Swing新手,欢迎提出任何实现这一点的建议。实际上,只有JTree知道扩展状态,TreeNodes中没有此类信息。TreeNode位于一侧,

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

有没有办法从DefaultMutableTreeNode获取对JTree组件的引用?我计划使用JTree.expandPath(),但我只有对treenode的引用


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

实际上,只有JTree知道扩展状态,TreeNodes中没有此类信息。TreeNode位于一侧,在JTree上没有指针(至少不是默认的,您当然可以使用引用创建自己的,但它打破了一点模式)


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

查看
DefaultMutableTreeNode
的源代码,我看不到任何好的方法,但您可以尝试以下方法之一:

  • 扩展
    DefaultMutableTreeNode
    并将引用存储到树中
  • 默认节点具有“用户对象”的概念。可以将对树的引用设置为此对象。它是完全非类型安全的,但可能会工作。编辑:事实上,仔细观察用户对象是如何使用的(作为树路径的文本表示,在
    toString()
    中),以这种方式设置用户对象会破坏API的预期用途。所以:讨厌,但可能有用

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

有趣的是要知道您在哪个对象中:因为您想对鼠标事件做出反应,所以我猜您可以访问视图层(至少通过获取源自MouseEvent的组件,该组件应该是JTree)。如果是,您可以获取所选行并调用。从DefaultMutableTreeNode构建树路径作为练习:-)

编辑从下面的评论中,让我澄清我的答案。
您必须使用通过简单调用DefaultMutableTreeNode生成的调用。

但是,我在他的问题中没有看到鼠标事件的引用。如果它恰好是对用户单击的响应,
event.getSource()
可能是最好的选择。我正在定制一个封闭源代码的客户端应用程序。它在UI中有一个树,只公开了获取所选节点的方法。它返回TreeNode的一个子类。而且没有办法获得对父树的引用。现在我想将所选节点扩展到它的叶子。@sarav-在这种情况下,恐怕你运气不好。如果除了树节点之外没有其他访问权限,则无法控制JTree的扩展状态。如果您可以访问顶部窗口/组件(或同一窗口中的任何组件),并且确定它的结构是静态的,那么可能会有一种(非常)肮脏的方法来执行此操作。@sarav-(请注意,用这些新的细节编辑你的问题,让每个人都清楚地看到整个情况)谢谢你的回复。是的,我在这里运气不好。找一些其他的工作。