繁体   English   中英

在 Java 中手动重命名 JTree 节点

[英]Renaming the JTree Node Manually in Java

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

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

 jtee.setEditable(true);

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

喜欢

 someMethod(Arg1 oldNodeName,Arg2 newNodeName)

有没有办法做到这一点?

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

我假设您正在使用具有DefaultTreeModel的树,并使用DefaultMutableTreeNode的实例。

您必须遍历树节点并找到具有oldNodeName为用户 object 的节点,然后将其用户 object 更改为newNodeName ,并调用树 Z20F35E630DAF449DFA4C3F688F5C3 的方法nodeChanged

要正确重命名DefaultMutableTreeNode ,您必须将其设置为新用户 object 并通知JTree的表 model 节点已更改,以便它可以针对更短/更长的文本调整其大小。

假设您的树使用DefaultTreeModel ,请使用:

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

如果出现以下情况,它确实会更改 UI:

  • 您正在使用 DefaultTreeModel model
  • 你实际上改变了 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 没有任何作用,即使使用 repaint(); 也是如此。 真的必须更新用户对象(来自 DefaultMutableTreeNode 的字符串)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM