我正在使用一个DefaultTreeModel
填充了覆盖DefaultMutableTreeNode
它支持选择性地更改树中节点的显示字符串。如下面的代码所示,在我的表单中,我通过在单独的类中创建新节点来填充树,然后通过主数据类型的包装类将它们传递进去。那里的过程是创建一个新的覆盖DefaultMutableTreeNode
,向其中添加子项(每个AccessPoint
由具有多个子节点的节点表示),然后将其存储以供以后在 UI 中使用。
我第一次以这种方式添加节点时,效果非常好。添加以下代码的任何后续节点实际上都存储在DefaultTreeModel
,但是JTree
未使用新节点进行更新。
为什么说JTree
添加第一个孩子后没有填充?
private void populateAccessPointTreeModel(AccessPointDataWrapper wrapper) {
//the pre-created DefaultMutableTreeNode subclass instance is
// stored in the wrapper
DefaultMutableTreeNode accessPointNode =
wrapper.getAccessPointTreeNode();
//this line updates the accessPointTree with the new node (I've looked at the
// value in debug mode, and it does in fact add the node
((DefaultMutableTreeNode) accessPointTree.getRoot()).add(accessPointNode);
//unrelated logic happens down here...
}
如有必要,我可以在创建节点的位置包含代码,但我认为这不是问题。
问题是DefaultMutableTreeNode
不告知DefaultTreeModel
它的子项已更新。为此,您需要调用表模型中的适当方法(nodesChanged
或类似)或(最好)使用DefaultTreeModel.insertNodesInto
method.
DefaultTreeModel model = (DefaultTreeModel)accessPointTree.getModel();
DefaultMutableTreeNode root = model.getRoot();
model.insertNodeInto(accessPointNode, root, root.getChildCount());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)