【问题标题】:highlight the treeNode in the Jtree using the treeNode itself使用 treeNode 本身突出显示 Jtree 中的 treeNode
【发布时间】:2012-01-17 14:51:56
【问题描述】:

我有一个JTree (myTree),在另一个班级,我有一个DefaultMutableTreeNode,它取自myTree

在某个函数中,我希望JTree 突出显示节点。

我试过了:

myTree.setSelectionPath(new TreePath(treeNode));

但视觉上什么都没有发生。

有什么想法吗?

更新:

我还有另一个 JTable,它是根据 myTree 中选定的 treeNode 呈现的。表格正在正确更新。只是 myTree 拒绝在视觉上更新。

【问题讨论】:

  • 在调用函数时树是否聚焦?我不需要问你是否发布了SSCCE
  • @AndrewThompson 不,实际上焦点在另一个 JTree 中。抱歉,我不能发布更多代码,因为它是高度机密的。我不知道我是否可以在这里发布问题:P
  • @AndrewThompson 查看我的更新。

标签: java swing jtree


【解决方案1】:

您需要使用节点的实际树路径。不仅仅是 TreePath 的一个实例:

myTree.setSelectionPath(new TreePath(treeModel.getPathToRoot(treeNode)));

此外,javadoc 说:

如果路径的任何组件被隐藏(在折叠的节点下),并且 getExpandsSelectedPaths 为真,则它被暴露(可见)

所以请确保getExpandsSelectedPaths 为真。

【讨论】:

  • 不,它不起作用。我认为这与树没有像@AndrewThompson 建议的那样集中这一事实有关
  • 抱歉,这是其他地方的小错误
  • @AdelBoutros:您是否知道您刚刚接受的答案与我的答案完全相同?我给你解决方案已经半小时了。
  • 我多次阅读您的回答,是的,您是对的。起初它看起来不一样。很抱歉给您带来不便
  • 在下面查看我的答案,其中包含这个答案。
【解决方案2】:

从java API中,我们得到TreePath的描述如下:

表示节点的路径。 TreePath 是从 TreeModel 出售的对象数组。 数组元素的排序使得根始终是数组的第一个元素(索引 0)

因此,必须从一个数组构造一个有效的 TreePath,该数组包括从根节点到您要选择的节点的路径上的所有节点。

【讨论】:

  • 抱歉,我没有注意到@JBNizet 先回复了。你会得到一个赞成票
【解决方案3】:

使用SwingUtilities.invokeLater(Runnable) 可以解决许多 Swing 错误、怪癖和其他缺点:

SwingUtilities.invokeLater(new Runnable() {
    @Override
    public void run() {
        // JB Nizet's solution:
        myTree.setSelectionPath(new TreePath(treeModel.getPathToRoot(treeNode)));
    }
});

这也解决了与JTree.setSelectionPaths(TreePath[]) 相同的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多