更改节点名称时,JTree更改lineStyle

萨马兰特:

TLDR:

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


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

因此,JTree具有一些静态(如标头)和一些动态节点,其中仅使用值更新静态节点(这意味着始终显示整体轮廓),并且动态节点可能会由于一个请求而被附加并删除。对于下一个的结果。

此刻,当我意识到这个问题时,我才实现了静态节点:当我更改节点显示的值时,它还将lineStyle属性更改为有些奇怪,甚至是不可能选择的。

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

JTree默认轮廓

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

更新的JTree

如您所见,从“检查批号”节点一直向下的垂直线消失了,而其他线则保持在应有的位置。

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

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

在这里,参数“ node”是我重命名的节点,而String是我将其设置为的新值(至少这是我对这里发生的情况的理解),并且可以在类的构造函数中使用此行访问模型model = (DefaultTreeModel) tree.getModel();

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

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

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

我还尝试通过tree.putClientProperty()根据JTree上Oracle教程强制JTree使用斜线(默认情况下始终应使用斜线)

在这一点上,我还很不清楚可能是什么问题。对我来说唯一有意义的是发生这种情况的原因可能是TreeCellRenderer,但是我在这里也可能完全错了。任何帮助将非常感激。

萨马兰特:

经过一些故障排除后,我终于意识到,每次我填充JTree时都会看到相反的结果,该模型不会重置为根节点的0个子节点,而是将更改后的节点作为新节点堆叠为根节点的子节点(因此每当我填充JTree时,我就有7、14、21,...个子节点,而+7。

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

现在已经完全清除了JTree,然后再次设置它,使用renameNode()我在原始文章中提供的方法添加节点可以完美地工作。

希望这会帮助将来可能会遇到类似问题的其他人。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章