用Java手动重命名JTree节点

时间:2011-07-12 11:17:19

标签: java swing jtree

我创建了一个带有根节点“RootNode”的jtree和一些其他节点,如“Node1”,“Node2”,Node3“。

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

动态重命名节点
 jtee.setEditable(true);

但我想通过代码级别手动更改名称

喜欢

 someMethod(Arg1 oldNodeName,Arg2 newNodeName)

有没有办法做到这一点?

4 个答案:

答案 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)

如果出现以下情况,它会更改用户界面:

  • 您正在使用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上什么都没做,即使是重绘();也是如此。您确实必须更新UserObject(DefaultMutableTreeNode中的String)

一旦完成,它就是IMO最简单,最优雅的解决方案。