TLDR:
更新 JTree 的节点会更改 lineStyle(下图),我不知道为什么会发生这种情况以及如何防止它发生,因为我的代码不会在发生这些更改时更新 CellRenderer 的任何部分。
我有一个 Java 客户端-服务器应用程序,我在其中向服务器发送数据请求,并使用服务器根据客户端请求从数据库请求一些数据,然后将结果发送回客户端。然后将结果显示在 JTree 中,该 JTree 已经可以正常工作了。
因此,JTree 具有一些静态节点(如标头)和一些动态节点,其中静态节点仅使用值进行更新(这意味着始终显示整体轮廓)并且动态节点可能会作为一个请求的结果而被附加并被删除对于下一个的结果。
目前,当我意识到这个问题时,我只实现了静态节点:当我更改节点显示的值时,它也会将 lineStyle 属性更改为有些奇怪,甚至无法选择。
这是更新节点之前和之后 JTree 的外观图片:
这就是我更新节点时发生的情况:
正如您所看到的那样,从“检验批号”节点开始的垂直线应该一直下降,而其他线则保持在应该的位置。
我使用以下代码更新节点:
public void renameNode(DefaultMutableTreeNode node, String renamedNode) {
node.setUserObject(renamedNode);
model.nodeChanged(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);
tree.putClientProperty()
我还尝试通过根据JTree 上的 Oracle 教程使用来强制 JTree 使用有角度的线(默认情况下它总是应该这样做)。
在这一点上,我完全不知道可能是什么问题。对我来说唯一有意义的事情可能是 TreeCellRenderer 但我在这里也可能完全错了。任何帮助将非常感激。