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