Java 更新渲染树单元

Java 更新渲染树单元,java,swing,nodes,jtree,treecellrenderer,Java,Swing,Nodes,Jtree,Treecellrenderer,这是我的申请表 我想做的是,当用户的详细信息更新时,JTree中的节点也会更新。这是否可能,;即使JTree及其渲染单元已经创建 我需要一个更新渲染单元的示例,即使它已经被创建 以下是我的查看代码: void createTree() { rootNode = new DefaultMutableTreeNode("users"); for (User user : listOfUsers) { String id = user.getId();

这是我的申请表

我想做的是,当用户的详细信息更新时,JTree中的节点也会更新。这是否可能,;即使JTree及其渲染单元已经创建

我需要一个更新渲染单元的示例,即使它已经被创建

以下是我的查看代码:

void createTree() {

    rootNode = new DefaultMutableTreeNode("users");

    for (User user : listOfUsers) {

        String id = user.getId();
        File file = new File(id);
        DefaultMutableTreeNode node = new DefaultMutableTreeNode(file);
        rootNode.add(node);
    }

    treeModel = new DefaultTreeModel(rootNode);
    tree = new JTree(rootNode);
}

void addTreeModelListener(TreeModelListener a) {

    treeModel.addTreeModelListener(a);
}

void repaintTree() {

    treeModel.reload();
    tree.revalidate();
    tree.repaint();
}
这是我的控制器代码:

view.addTreeModelListener(new MyTreeModelListener());

class MyTreeModelListener implements TreeModelListener {
    public void treeNodesChanged(TreeModelEvent e) {

        DefaultMutableTreeNode node;
        node = (DefaultMutableTreeNode)(e.getTreePath().getLastPathComponent());

        int index = e.getChildIndices()[0];
        node = (DefaultMutableTreeNode)(node.getChildAt(index));

        System.out.println("The user has finished editing the node.");
        System.out.println("New value: " + node.getUserObject());       
    }

    public void treeNodesInserted(TreeModelEvent e) {}
    public void treeNodesRemoved(TreeModelEvent e) {}
    public void treeStructureChanged(TreeModelEvent e) {}
}
这个想法是在对对象进行更改之后,我调用repaintree()方法。现在查看代码之后,我认为问题在于我正在更改对象细节,而不是节点细节,但这只是一种预感


请尽快回复,非常感谢。

Swing使用MVC架构

因此,树中包含的数据和渲染逻辑是完全解耦和独立的

您可以简单地更改树的内容,而不用担心使用它。 只是不要忘记在更新后调用
revalidate()
repaint()
方法


祝你好运。

谢谢你的及时回复和示例。我一直在提到他们,但目前我仍无法让它发挥作用。它所做的是当我保存时,JTree不聚焦自己;可能是因为JTree正在重新验证,只是出于某种原因它没有更新渲染的单元格。您是否同时调用了重新验证和重新绘制?是的,我创建了一个树模型,并尝试重新加载()。在对树模型进行更改后,您必须调用它的重新加载方法。我发现了问题所在;即使我正在更新对象,也需要更新用户列表。这是否意味着当您创建对象列表时,实际上是在复制对象以创建列表,而不是传输对象本身?