2011-07-12 44 views
3

我創建根節點「根節點」等「節點1」,「節點2」,節點3" 的一些其他節點的JTree。重命名JTree的節點手動將在Java中

創建樹後,我要重新命名在根節點或手動任何其他節點。 我們可以利用該方法

jtee.setEditable(true); 

動態重命名節點,但我想通過代碼級

在manualy更改名稱
someMethod(Arg1 oldNodeName,Arg2 newNodeName) 

有沒有辦法做到這一點?

回答

4

假設您正在使用DefaultMutableTreeNode,您可以通過在要更改的節點上調用:setUserObject()來更改UserObject(其toString()方法用於顯示節點名稱)。

3

我假設你正在使用一棵具有DefaultTreeModel的樹,使用DefaultMutableTreeNode的實例。

你必須通過樹節點進行迭代,找到它具有oldNodeName爲用戶對象的一個​​,然後改變其用戶對象newNodeName,並調用樹模型的方法nodeChanged

1

要正確重命名一個DefaultMutableTreeNode,您必須將它的新的用戶對象,以及通知JTree的桌子模型的節點改變,從而可以調整它的短/長文本。

假設你的樹是使用DefaultTreeModel,使用此:

public void renameNode(JTree tree, DefaultMutableTreeNode node, Object new_user_object) { 
    node.setUserObject(new_user_object); 
    ((DefaultTreeModel) tree.getModel()).nodeChanged(node); 
} 
+0

我試過這個,但是這並沒有更新我的GUI ... – behzad

0

它確實改變了UI,如果:

  • 您使用DefaultTreeModel的模型
  • 你真正改變UserObject

這就是這樣說的:

// TheNode is a CustomMutableTreeNode (extending DefaultMutableTreeNode) 
// and points to the selected node to alter 
String NewNodeName = Dlg.NewNodeName.getText(); 
if(!NewNodeName.isEmpty()) { 
    ON.setName(NewNodeName); // ON is the real source data 
    TheNode.setUserObject(NewNodeName); 
    ((DefaultTreeModel)JSONTree.getModel()).nodeChanged(TheNode); 
} 

花了我相當長的一段時間才發現,改變源數據(ON)在UI上什麼都不做,即使使用了repaint();.你真的必須更新用戶對象(從DefaultMutableTreeNode一個字符串)

一旦完成,這是最簡單和最優雅的解決方案IMO。