我在这里看到过很多类似的主题,但是找不到真正解决我的小问题的解决方案。
我的应用程序正在搜索文件,并在jtree中显示结果。我对此有疑问。当我使用insertNodeInto(...)将新节点添加到树中时;我可以在搜索的同时搜索找到的项目,但是可视化存在问题。我的意思是渲染节点时出现问题-我真的无法正确解释这一点,因此我将其包括在内。
当我在搜索结束时在jtree上使用reload时,一切都恢复了正常-渲染正常,不幸的是,这关闭了用户打开的所有选项卡。
我是学生-对不起,我的英语不好。我希望有人知道为什么出现此问题。
最佳答案
GUI的显示方式肯定看起来像是在绘画线程(事件调度线程(EDT))之外向模型添加组件。反过来,这将触发该线程之外的绘画,从而导致绘画不稳定。
请看看this tutorial on threads in Swing
查看DefaultTreeModel
,很明显insertNodeInto(..)
方法将触发GUI更新,因此,如果未在EDT上进行操作,则很容易出现示例中描绘的绘画问题。
一个快速的解决方法是添加一种类似于下面(未编译)代码的方法:
public void safeInsertNodeInto(final MutableTreeNode newChild,
final MutableTreeNode parent, final int index) {
SwingUtilities.invokeLater(
new Runnable(){
public void run(){
model.insertNodeInto(newChild,parent,index);
}
}
);
}
然后调用该方法,而不是直接调用模型。
也就是说,我强烈建议您阅读上面引用的教程。有更高级的方法来处理EDT约束。