java - 动态 JTree 和 SwingUtilities.invokeLater() 什么都不做

标签 java swing jtree invokelater

为了创建我的动态 JTree,我在 this website in chapter "4.2 OutlineNode.java" 上阅读了关于 Dynamic JTrees 的教程。

现在我已经实现了它并且认识到在 GUI 线程中加载数据需要很长时间并且也很丑陋。因此,我添加了一个线程来扩展子节点,然后将 TreeNode 元素添加到树中。

private void getChildNodes() {
    areChildrenDefined = true;
    Thread t = new Thread(new Runnable()
    {
        @Override
        public void run() {
        System.out.println("Expand");
            final List<DECTTreeNode> listNodes = new ArrayList<DECTTreeNode>();
            if (castNode().canExpand())
            {
                for(DECTNode crt : castNode().getChildren())
                {   
                    DECTTreeNode treeNode = new DECTTreeNode(crt);
                    listNodes.add(treeNode);
                }

                try {
                    SwingUtilities.invokeAndWait(new Runnable()
                    {
                        @Override
                        public void run() {
                            System.out.println(listNodes.size());
                            for (DECTTreeNode crt : listNodes)
                            {
                                add(crt); // <==== Adds the node to the JTree
                            }
                        }

                    });
                    //}).run();
                } catch (Exception e) {
                    e.printStackTrace();
                }

            }
        }

    });
    t.start();
}

没有线程,它可以正常工作。如果我添加线程并将 add 调用放入 SwingUtilities.invokeAndWait(...),子项似乎已展开,但它们在树。

我已经在树上尝试了 revalidate()repaint() - 没有任何效果。

知道如何让这些元素可见吗?

提前谢谢你。

最佳答案

检查您的 add() 方法是否触发了正确的 TreeModelEvent

关于java - 动态 JTree 和 SwingUtilities.invokeLater() 什么都不做,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9259787/

相关文章:

java - 设置新的 TreeModel 时如何自动扩展 JTree?

java - 复选框节点树,自定义渲染器

java - 如何在 impala 中编写 java udf

java - 如何设计按钮?

java - 覆盖 getPreferredSize() 会破坏 LSP

java - 从点分隔字符串列表创建 JTree

java - 使用 URL 字符串进行 API 调用的更好方法

java - Java 应用程序可以在 LibreOffice 中创建报告吗?

java - 无法让 JFrame 刷新图像

java - 在java中旋转图像