0

这是我的申请。

在此处输入图像描述

我想要做的是这样当用户的详细信息被更新时,它在 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) {}
}

这个想法是在对对象进行更改之后,我调用 repaintTree() 方法。现在查看代码后,我认为问题在于我正在更改对象详细信息而不是节点详细信息,但这只是一种预感。

请尽快回复,非常感谢。

4

1 回答 1

2

Swing 使用 MVC 架构。

所以树中包含的数据和渲染的逻辑是完全解耦和独立的。

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

祝你好运。

于 2014-04-04T11:20:33.740 回答