在Java中手动重命名JTree节点

在Java中手动重命名JTree节点,java,swing,jtree,Java,Swing,Jtree,我已经创建了一个jtree,其中包含根节点“RootNode”和一些其他节点,如“Node1”、“Node2”、“Node3” 创建树之后,我想手动重命名rootnode或任何其他节点。 我们可以使用该方法动态重命名节点 jtee.setEditable(true); 但是我想在代码级别手动更改名称 像 有什么方法可以做到这一点吗?假设您使用的是DefaultMutableTreeNode,您可以通过调用来更改UserObject(其toString()方法用于显示节点名):setUserO

我已经创建了一个jtree,其中包含根节点“RootNode”和一些其他节点,如“Node1”、“Node2”、“Node3”

创建树之后,我想手动重命名rootnode或任何其他节点。 我们可以使用该方法动态重命名节点

 jtee.setEditable(true);
但是我想在代码级别手动更改名称


有什么方法可以做到这一点吗?

假设您使用的是DefaultMutableTreeNode,您可以通过调用来更改UserObject(其toString()方法用于显示节点名):
setUserObject()
在您要更改的节点上。

我假设您使用的是带有
DefaultTreeModel
的树,使用的是
DefaultMutableTreeNode
的实例

您必须遍历树节点,找到将
oldNodeName
作为用户对象的节点,然后将其用户对象更改为
newNodeName
,并调用树模型的方法
nodeChanged

要正确地重命名
DefaultMutableTreeNode
,必须设置它的新用户对象,并通知
JTree
s表模型节点已更改,以便它可以针对较短/较长的文本调整其大小

假设您的树使用的是
DefaultTreeModel
,请使用以下命令:

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

如果出现以下情况,则会更改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);
}
我花了很长时间才发现,即使使用repaint();,更改源数据(在ON中)对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);
}