1

我在这里看到了很多类似的主题,但无法真正找到解决我的小问题的方法。

我的应用程序正在搜索文件并在 jtree 中显示结果。我有一个问题。当我使用 insertNodeInto(...); 将新节点添加到树中时;我可以在搜索的同时搜索找到的项目,但可视化存在问题。我的意思是渲染节点时存在问题 - 我真的无法正确解释,所以我将这张图片包括在内。

在此处输入图像描述

当我在搜索结束时在 jtree 上使用重新加载时,一切都恢复正常 - 渲染正常,不幸的是,这会关闭用户打开的所有选项卡。

我是一名学生 - 对不起我糟糕的英语。我希望有人知道为什么会出现这个问题。

4

1 回答 1

2

您的 GUI 的显示方式看起来就像是在绘制线程(事件调度线程 (EDT))之外向模型添加组件。这反过来将触发该线程之外的绘制,这将导致绘制不稳定。

请查看本教程关于 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 约束。

于 2012-07-29T05:44:23.093 回答