【问题标题】:Renaming the JTree Node Manually in Java在 Java 中手动重命名 JTree 节点
【发布时间】:2011-10-03 13:12:14
【问题描述】:

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

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

 jtee.setEditable(true);

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

喜欢

 someMethod(Arg1 oldNodeName,Arg2 newNodeName)

有什么办法吗?

【问题讨论】:

    标签: java swing jtree


    【解决方案1】:

    它确实会改变 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);
    }
    

    我花了很长时间才发现更改源数据(在 ON 中)对 UI 没有任何影响,即使使用 repaint();。您真的必须更新 UserObject(来自 DefaultMutableTreeNode 的字符串)

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

    【讨论】:

      【解决方案2】:

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

      假设你的树使用DefaultTreeModel,使用这个:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-08-06
            • 1970-01-01
            • 2018-06-06
            • 2014-12-20
            • 2023-03-30
            • 2017-05-05
            • 2011-07-04
            相关资源
            最近更新 更多