在最后修改区域扩展Jtree?

我正在使用dom4j从dom4j文档创建DocumentTreeModel。

我在JScrollPane显示了这个DocumentTreeModel。

我有一个按钮,为dom4j文档添加一个新节点,并重新创建DocumentTreeModel

我使用的是getPathForRow,但这看起来非常有限。 我需要能够使用多个树深度。 基本上寻找像tree.getPathOfLastModifiedChildrensParent()这样的东西

 onAddNewNodeButtonClickEventFired { dom4jdocument.addElement( "1" ); tree.setModel(new DocumentTreeModel(dom4jdocument)); tree.expandPath(tree.getPathForRow(1)); } 

基本上我每次编辑文档时都试图让Jtree重绘文档。

在编辑文档时看到您设置新模型看起来仍然没有运行通知,对吧? 如果是这样,你在JTree上不需要任何特殊的方法 – 你需要的是一个表现良好的TreeModel实现;-)

只是为了好玩,我查找了DocumentTreeModel:这是一个非常小的封面,在DefaultTreeModel之上,没有任何支持将Document中的更改粘贴到DocumentTreeModel中的更改。 Leaf- / BranchTreeNode仅实现TreeNode(而不是更进一步并实现MutableTreeNode)的事实甚至禁用模型帮助器方法来插入/删除节点。 简短的故事:所有的辛勤工作都留给你。

基本上,您必须使treeModel知道底层Document中的任何更改。 像(伪代码)的东西:

  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 Jeanette

尝试 – tree.revalidate(); 它应该刷新组件树。