我正在使用 dom4j 从 dom4j 文档创建 DocumentTreeModel。
我在里面显示这个 DocumentTreeModelJScrollPane
.
我有一个按钮,可以将新节点添加到 dom4j 文档,并重新创建 DocumentTreeModel
我正在使用 getPathForRow 但这似乎相当有限。我需要能够使用多个树深度。基本上寻找类似的东西tree.getPathOfLastModifiedChildrensParent()
onAddNewNodeButtonClickEventFired {
dom4jdocument.addElement( "1" );
tree.setModel(new DocumentTreeModel(dom4jdocument));
tree.expandPath(tree.getPathForRow(1));
}
基本上我想得到Jtree
每次编辑文档时重新绘制文档。
每当您编辑文档时看到您设置新模型,看起来您仍然没有运行通知,对吧?如果是这样,您不需要 JTree 上的任何特殊方法 - 您需要的是 TreeModel 的良好实现;-)
只是为了好玩,我查找了 DocumentTreeModel:这是 DefaultTreeModel 之上的一个非常小的覆盖物,不支持将文档中的更改粘合到 DocumentTreeModel 中的更改。事实上,Leaf-/BranchTreeNode 仅实现 TreeNode(而不是更进一步实现 MutableTreeNode),甚至禁用模型辅助方法来插入/删除节点。短篇故事:所有的辛苦都交给你了。
基本上,您必须使 treeModel 知道底层文档中的任何更改。类似于(伪代码):
DocNode newElement = document.addElement(...)
DocNode parentElement = newElement.getParent();
// walk the tree until you find the TreeNode which represents the DocNode
BranchTreeNode root = treeModel.getRoot();
BranchTreeNode parentNode = null;
forEach (root.child)
if child.getXMLNode().equals(parentElement)
parentNode = child;
// now find the childNode which corresponds to the new element
forEach (parentNode.child)
if (parentNode.child.getXMLNode().equals(newElement)
childNode = child;
// now notify the treeModel that an insertion has happened
treeModel.nodesWhereInserted(parentNode, childNode ...)
嗯......在你的立场上,我会寻找一个更舒适的实现,不敢相信在某个地方还有另一个实现?
CU
珍妮特
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)