Java 为什么';t nodeChanged调用触发给定节点的cellrenderer在Jtree中执行?

Java 为什么';t nodeChanged调用触发给定节点的cellrenderer在Jtree中执行?,java,swing,jtree,Java,Swing,Jtree,我有一个应用程序,其中JTree节点包含jprogressbar。我使用这样的函数来更新给定节点的UI: public void setProgressForNode(DefaultMutableTreeNode node, int progressValue) { ((ExecutionItem) node.getUserObject()).setProgressValue(progressValue); originalModel.nodeChanged(node); }

我有一个应用程序,其中JTree节点包含jprogressbar。我使用这样的函数来更新给定节点的UI:

public void setProgressForNode(DefaultMutableTreeNode node, int progressValue)
{
    ((ExecutionItem) node.getUserObject()).setProgressValue(progressValue);
    originalModel.nodeChanged(node);
}
每当保存progressbar的节点更新为给定值时,就会调用此函数
nodeChanged(node)
应该更新UI,但它不会。有人知道吗? 我可以看到的是,在调用
nodeChanged(node)
之后,没有为给定节点调用渲染器。如果我在“执行”过程中连续单击树中的节点,将调用渲染器,以便progressbar更新


谢谢

如果我没有弄错的话,在C#和Java中的大多数对象中都有一个Invalidate 根据我的经验,这就是要使用的方法,然后你需要重新绘制一个控件/对象,比如procesbar

如果它是可张贴的,可能是这样的:

Node.Invalidate()
这将迫使用户界面重新绘制,不管它在做什么 祝你好运

试试下面的方法

DefaultMutableTreeNode parent = (DefaultMutableTreeNode) node.getParent();
originalModel.nodeStructureChanged(parent);

它与JAVA概念相去甚远。Java正在使用模型,因此不应该调用invalidate、repaint等来触发树本身的更改。更重要的是,它不工作…我很抱歉,它为我工作,然后我与一个进度栏,将更新其进度。我想同样的事情也可能是错的。很好,这是值得一试的。不幸的是,它不起作用:(更重要的是,这里的父级是根,它不是最好更新的,因为整个树都将被更新,不是吗?