gpt4 book ai didi

java - JTree 更新节点而不折叠

转载 作者:搜寻专家 更新时间:2023-10-30 21:05:59 25 4
gpt4 key购买 nike

我有一个 Java SE 7 应用程序需要 JTree节点已更新。来自 Oracle 使用此 thread 给出的教程,没有关于如何更新代码上的标签(树上节点的显示文本)的提示。目前我正在使用 DefaultTreeModel作为我的模型 JTreeDefaultMutableTreeNode作为所述树的节点。

为了进一步了解我正在处理的应用程序的详细信息,我正在开发一个聊天工具,其中显示联系人及其每个帐户的可用性状态(在线、离线等)。

问题是,我如何更新特定节点的显示文本而不(最多)将它从它的父节点中删除并将它添加到它的指定索引中。像DefaultMutableTreeNode.setText("<new label>")


更新:2013 年 1 月 20 日

重新定义问题以进行澄清。

最佳答案

也许如果您使用“nodeChanged()”而不是“reload()”,您将获得您想要的效果。

DefaultTreeModel 类中有许多方法可以更改和重绘树的各个部分。 DefaultTreeModel 上还有其他方法只会导致重绘发生。

您提到了“reload(node)”并评论说当您调用它时它会导致树折叠。 'reload' 导致从该节点开始完全重绘整个子树。 (但如果该节点不可见,则它不会发生任何变化。)这称为“结构变化”。

'insertNodeInto()' 和 'removeNodeFromParent()' 通过添加或删除节点然后重绘来修改树结构。

我认为“nodeChanged()”是您需要的,因为它只是通知模型节点中发生了某些变化,这将导致其显示不同。也许可显示文本现在与以前不同。也许您更改了节点中的用户对象。那就是您在节点上调用“nodeChanged()”的时候。

您应该在您自己崩溃的代码和提供的示例程序 vels4j 中尝试使用“nodeChanged()”代替“reload()”调用。这可能会解决问题。

请注意,在其他情况下使用的 DefaultTreeModel 上还有另外两个方法系列:

这些方法与树节点一起使用,并使用树路径来定义发生更改的位置。它们不会更改树下的数据结构,但会通知模型发生了某些更改,以便它可以通知监听器实际重绘内容或以其他方式响应更改。

nodesWereInserted()nodesWereRemovde()nodesChanged()nodeStructureChanged()

还有一组 fire...() 方法在内部用于 DefaultTreeModel 和您可能创建的任何子类。他们只是通知任何听众某些事情发生了变化。请注意,它们受到保护。

关于java - JTree 更新节点而不折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12249777/

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