我創建根節點「根節點」等「節點1」,「節點2」,節點3" 的一些其他節點的JTree。重命名JTree的節點手動將在Java中
創建樹後,我要重新命名在根節點或手動任何其他節點。 我們可以利用該方法
jtee.setEditable(true);
動態重命名節點,但我想通過代碼級
像
在manualy更改名稱someMethod(Arg1 oldNodeName,Arg2 newNodeName)
有沒有辦法做到這一點?
我創建根節點「根節點」等「節點1」,「節點2」,節點3" 的一些其他節點的JTree。重命名JTree的節點手動將在Java中
創建樹後,我要重新命名在根節點或手動任何其他節點。 我們可以利用該方法
jtee.setEditable(true);
動態重命名節點,但我想通過代碼級
像
在manualy更改名稱someMethod(Arg1 oldNodeName,Arg2 newNodeName)
有沒有辦法做到這一點?
假設您正在使用DefaultMutableTreeNode,您可以通過在要更改的節點上調用:setUserObject()
來更改UserObject(其toString()方法用於顯示節點名稱)。
我假設你正在使用一棵具有DefaultTreeModel
的樹,使用DefaultMutableTreeNode
的實例。
你必須通過樹節點進行迭代,找到它具有oldNodeName
爲用戶對象的一個,然後改變其用戶對象newNodeName
,並調用樹模型的方法nodeChanged
。
要正確重命名一個DefaultMutableTreeNode
,您必須將它的新的用戶對象,以及通知JTree
的桌子模型的節點改變,從而可以調整它的短/長文本。
假設你的樹是使用DefaultTreeModel
,使用此:
public void renameNode(JTree tree, DefaultMutableTreeNode node, Object new_user_object) {
node.setUserObject(new_user_object);
((DefaultTreeModel) tree.getModel()).nodeChanged(node);
}
它確實改變了UI,如果:
這就是這樣說的:
// 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。
我試過這個,但是這並沒有更新我的GUI ... – behzad