gpt4 book ai didi

java - JTree 在更改节点名称时更改 lineStyle

转载 作者:行者123 更新时间:2023-11-30 05:32:52 47 4
gpt4 key购买 nike

TLDR:

更新 JTree 的节点会更改 lineStyle(如下图),我不知道为什么会发生这种情况以及如何防止它发生,因为我的代码在这些更改时没有更新 CellRenderer 的任何属性发生。

<小时/>

我有一个 Java 客户端-服务器应用程序,我向服务器发送数据请求,并使用服务器根据客户端请求从数据库请求一些数据,然后将结果发送回客户端。然后结果将显示在 JTree 中,该 JTree 已经工作正常。

因此,JTree 具有一些静态节点(如 header )和一些动态节点,其中静态节点仅用值进行更新(这意味着始终显示整体轮廓),而动态节点可能会作为一个结果被附加请求并删除以获得下一个结果。

目前,当我意识到这个问题时,我只实现了静态节点:当我更改节点显示的值时,它也会将 lineStyle 属性更改为有些奇怪,甚至无法选择。

这是更新节点之前和之后 JTree 的外观图片:

JTree default outline

这就是我更新节点时发生的情况:

updated JTree

正如您所看到的,从“检验批号”节点开始的垂直线应该一直向下消失,而其他线则留在应该在的位置。

我使用以下代码更新节点:

public void renameNode(DefaultMutableTreeNode node, String renamedNode) {
node.setUserObject(renamedNode);
model.nodeChanged(node);
}

这里参数“node”是我重命名的节点,字符串是我设置的新值(至少这是我对这里发生的情况的理解),并且使用类的构造函数中的这一行来访问模型: model = (DefaultTreeModel) tree.getModel();.

我不知道这对于解决方案是否重要,但目前我并没有真正定义的 TreeModel,因为我使用根节点启动 JTree,然后动态附加所有节点。然而,在我看来,它似乎与 TreeCellRenderer 有关。对于渲染器,我当前使用此配置:

renderer.setSize(tree.getParent().getMaximumSize());

renderer.setLeafIcon(null);
renderer.setOpenIcon(null);
renderer.setClosedIcon(null);
renderer.setDisabledIcon(null);

我还尝试根据 Oracle tutorial on JTree 使用 tree.putClientProperty() 强制 JTree 使用有角度的线(默认情况下它总是应该这样做)。 .

此时我完全不知道可能出现什么问题。对我来说唯一有意义的事情发生的原因可能是 TreeCellRenderer 但我在这里也可能完全错误。任何帮助将不胜感激。

最佳答案

经过一些故障排除后,我终于意识到,每次我填充 JTree 时,与所看到的相反,模型并没有重置为根节点的 0 个子节点,而是将更改的节点堆叠为新节点作为根的子节点节点(所以我得到了 7、14、21……子节点,每次填充 JTree 时都会+7)。

原因是我不知道在调用 ((DefaultMutableTreeNode) tree.getModel().getRoot()) 后必须调用 model.reload() 。 removeAllChildren(); (我需要这样做来完全删除树,以便我的数据只在 JTree 中列出一次)。

现在 JTree 在再次设置之前已被完全清除,使用我原始帖子中提供的方法 renameNode() 添加节点效果非常好。

希望这对将来可能面临类似问题的其他人有所帮助。

关于java - JTree 在更改节点名称时更改 lineStyle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57196022/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com