这是我的申请。
我想要做的是,当用户的详细信息更新时,它是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()方法。在查看代码之后,我认为问题在于我正在更改对象详细信息而不是节点详细信息,但这只是一种预感。
请尽快回复,非常感谢。
答案 0 :(得分:2)
Swing使用MVC架构。
因此树中包含的数据和渲染逻辑完全解耦且独立。
您只需更改树的内容,而无需担心使用此Oracle Tutorial。
更新后请不要忘记调用revalidate()
和repaint()
方法。