Java 更新渲染树单元
这是我的申请表 我想做的是,当用户的详细信息更新时,JTree中的节点也会更新。这是否可能,;即使JTree及其渲染单元已经创建 我需要一个更新渲染单元的示例,即使它已经被创建 以下是我的查看代码: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();
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正在重新验证,只是出于某种原因它没有更新渲染的单元格。您是否同时调用了重新验证和重新绘制?是的,我创建了一个树模型,并尝试重新加载()。在对树模型进行更改后,您必须调用它的重新加载方法。我发现了问题所在;即使我正在更新对象,也需要更新用户列表。这是否意味着当您创建对象列表时,实际上是在复制对象以创建列表,而不是传输对象本身?