gpt4 book ai didi

java - 从 DefaultMutableTreeNode 递归删除子项不会在框架中正确更新

转载 作者:行者123 更新时间:2023-12-01 10:10:39 30 4
gpt4 key购买 nike

我有一个 JTree,projectView:

projectView = new JTree(projectViewTop);
projectView.setBackground(Color.WHITE);
projectView.setSize(250, getHeight());
projectView.setLocation(0, 0);
projectView.setVisible(true);
projectView.addKeyListener(this);
add(projectView);

其中 projectViewTop 是 JTree 的主节点 (DefaultMutableTreeNode):

DefaultMutableTreeNode projectViewTop = new DefaultMutableTreeNode("Project");

projectViewTop 有几个子节点,其中也包含子子节点(projectViewTop 是“Project [My project]”节点):

enter image description here

在某一时刻,我需要清除 projectViewTop 节点的每个子节点。我创建了这个方法来递归地清除它们:

public void clearNode(DefaultMutableTreeNode node) {
for (int i = 0; i < node.getChildCount(); i++) {
DefaultMutableTreeNode child = (DefaultMutableTreeNode) node.getChildAt(i);
clearNode(child);
}
node.removeAllChildren();
}

但是,当我运行此方法时,内容在视觉上并没有被清除。这是 JTree 显示时发生的情况:

enter image description here

另一方面,如果我折叠主节点,它会正确清除所有内容(似乎只有当我折叠主节点时视觉效果才会更新)。 清除主节点时如何防止“脏”子节点留在主节点上?

最佳答案

您需要通知TreeModel结构已更改。

无论出于何种原因(我假设这是一种优化选择),节点与 TreeModel 没有(直接)连接,它们有点像两个一起工作的模型,但其中一个模型不在不与对方交谈...是的,这很烦人

所以当你修改“节点”树时,需要通知TreeModel并且会导致JTree更新...

DefaultTreeModel 有一个 nodesWereRemoved如果您使用的是 DefaultTreeModel,则可以使用该方法。

关于java - 从 DefaultMutableTreeNode 递归删除子项不会在框架中正确更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36144909/

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