我创建了一个带有根节点“RootNode”的jtree和一些其他节点,如“Node1”,“Node2”,Node3“。
创建树后,我想手动重命名rootnode或任何其他节点。 我们可以使用方法
动态重命名节点 jtee.setEditable(true);
但我想通过代码级别手动更改名称
喜欢
someMethod(Arg1 oldNodeName,Arg2 newNodeName)
有没有办法做到这一点?
答案 0 :(得分:4)
假设您正在使用DefaultMutableTreeNode,您可以通过在要更改的节点上调用:setUserObject()
来更改UserObject(其toString()方法用于显示节点名称)。
答案 1 :(得分:3)
我假设您正在使用DefaultTreeModel
的树,使用DefaultMutableTreeNode
的实例。
您必须遍历树节点并找到具有oldNodeName
作为用户对象的节点,然后将其用户对象更改为newNodeName
,并调用方法nodeChanged
树模型。
答案 2 :(得分: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);
}
答案 3 :(得分:0)
如果出现以下情况,它会更改用户界面:
这就是说:
// 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上什么都没做,即使是重绘();也是如此。您确实必须更新UserObject(DefaultMutableTreeNode中的String)
一旦完成,它就是IMO最简单,最优雅的解决方案。