更新渲染的树单元格

时间:2014-04-03 15:02:10

标签: java swing nodes jtree treecellrenderer

这是我的申请。

enter image description here

我想要做的是,当用户的详细信息更新时,它是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()方法。在查看代码之后,我认为问题在于我正在更改对象详细信息而不是节点详细信息,但这只是一种预感。

请尽快回复,非常感谢。

1 个答案:

答案 0 :(得分:2)

Swing使用MVC架构。

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

您只需更改树的内容,而无需担心使用此Oracle Tutorial。 更新后请不要忘记调用revalidate()repaint()方法。

祝你好运。