Java 重新加载JTree时闪烁

Java 重新加载JTree时闪烁,java,swing,rendering,jtree,double-buffering,Java,Swing,Rendering,Jtree,Double Buffering,我正在制作一个带有JTree频繁更新的模拟器。树中的节点都是jprogressbar 我正在调用tree.treeModel.insertNodeInto(,)和treeModel.reload()来更新树。问题在于,它不需要等待repaint()调用即可立即更新自身。这会导致树闪烁。我已尝试为节点、树及其所在的容器设置setDoubleBuffered(true),但没有任何更改 下面是我的代码:(类文件扩展了DefaultMutableTreeNode) 我怀疑这是导致闪烁的原因。通过单击圆

我正在制作一个带有
JTree
频繁更新的模拟器。树中的节点都是
jprogressbar

我正在调用
tree.treeModel.insertNodeInto(,)
treeModel.reload()
来更新树。问题在于,它不需要等待
repaint()
调用即可立即更新自身。这会导致树闪烁。我已尝试为节点、树及其所在的容器设置
setDoubleBuffered(true)
,但没有任何更改

下面是我的代码:(类
文件扩展了DefaultMutableTreeNode


我怀疑这是导致闪烁的原因。通过单击圆形或调整封闭框架的大小,可以看到这种效果。为了获得更好的指导,请编辑您的问题,使其包含一个显示您描述的问题的列表。

我已修复它。我刚换了衣服

myTreeModel.insertNodeInto(file, parent, parent.getChildCount());


我不知道为什么现在能用。但确实如此。任何意见都将不胜感激

自定义渲染器也有同样的问题

只需在
SwingUtilities.invokeLater中进行更新

SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            myTreeModel.insertNodeInto(file, parent, parent.getChildCount());
        }

是吗?也许吧。但我不太关心性能,因为总体更新率足够小。我只是想摆脱重新加载时的闪烁。缓冲区应该做到这一点。但是我不知道如何用一种简单的方法来做。在
insertNodeInto
之后不需要调用
reload()
insertNodeInto
内部调用
FireTreeNodeInserted
,然后更新树。感谢您对SSCE的建议。我会做的。但这似乎太多的工作了,因为问题现在已经解决了。parent.add(文件)打破了基于模型的更新逻辑-您只需将新组件添加到视图中,并且需要手动更新UI。
parent.add(file);
SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            myTreeModel.insertNodeInto(file, parent, parent.getChildCount());
        }