2011-04-07 59 views
3

我正在使用dom4j從dom4j文檔創建DocumentTreeModel。在最後修改區域展開Jtree?

我在JScrollPane中顯示此DocumentTreeModel。

我有一個按鈕,增加了一個新的節點到dom4j的文件,並重新創建我使用getPathForRow的DocumentTreeModel

但這似乎相當有限。我需要能夠使用多個樹深度。基本上,尋找類似tree.getPathOfLastModifiedChildrensParent()

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

基本上我試圖讓Jtree重繪文檔,每次編輯文檔。

+0

我看這個問題是來自去年,但你有沒有考慮推行'TreeModel'?這應該能夠讓你跟蹤dom4j文檔中元素的變化。 – 2012-04-11 11:50:43

+1

@JamesPoulson,哦,是的......在問這個問題後不久,我用了TreeModel。 – KJW 2012-04-12 04:28:46

+0

很高興聽到這個消息。它在我身邊表現很好。我所遇到的唯一問題是,當我向偵聽器發送treeStructureChanged事件時樹摺疊。爲了可用性,樹應該保持開放。 – 2012-04-13 13:47:32

回答

3

當您編輯文檔時,看到您設置新模型看起來您仍然沒有運行通知,對嗎?如果是這樣,你不需要任何特殊的方法在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 ...) 

嗯......你的鞋子我會找一個更舒適的實現,可以不相信有ISN另一個實現各地的地方?

CU 珍

+0

是啊我不知道它是否存在.... dom4j.swing是非常好的,但它似乎像我要實施所有這些管道代碼。 – KJW 2011-04-11 09:13:14

+0

基本問題似乎是模型本身無法跟蹤文檔中的更改,因爲文檔不支持通知。一種方法是將這些管道添加到DocumentTreeModel中,並僅通過這些管道代碼對文檔進行所有更改。雖然不是很健壯。另一個可能是找到一個支持EventTarget的dom實現,然後treeModel可以監聽它的變化(Piet Blok有一個DOMTreeModel,它可以實現)沒有幸福的硬幣;-) – kleopatra 2011-04-11 09:29:20

+0

http://www.pbjar.org/docs/ src/org/pbjar/dom/DOMTreeModel.java這是正確的嗎?這看起來像我正在尋找,但你說這有問題嗎? – KJW 2011-04-12 09:42:03

1

Try - tree.revalidate(); 它應該刷新組件樹。

+1

它沒有區別。 – KJW 2011-04-08 08:12:20