java - 将注释插入 JTree 时出现问题

标签 java swing jtree

我有一个 JTree,它是使用以下方法构造的:
(BKMNode 类扩展了 DefaultMutableTreeNodeDataNode 仅保存数据)

 void populateTree(BKMNode parent) {
    for (DataNode node : nodes) {
        BKMNode treeNode = new BKMNode(node.name,node.fullName,null);
        // check if this node was already added before
        if (! existingNodes.contains(ip + "." + node.fullName)) {
            existingNodes.add(ip + "." + node.fullName);
            DefaultTreeModel model = (DefaultTreeModel)tree.getModel();
            model.insertNodeInto(treeNode, parent, parent.getChildCount());
            System.out.println("adding " + ip + "." + node.fullName);
        }
        node.populateTree(treeNode);
    }

//一些更多不相关的代码...

当应用程序启动时创建树时,一切都很好。
但有时我的应用程序会使用相同的方法将节点添加到树中。
当应用程序尝试向树中添加新节点时,会打印文本,但 GUI 上没有任何变化。
我尝试调用 JTree.invalidate()validate()repaint()reload() 但没有任何结果似乎有帮助。

populateTree 方法始终从 EDT 调用。

有谁知道这里有什么问题吗?

提前非常感谢!

最佳答案

Trust me, I tried using every invalidate, validate, repaint, reload method

抱歉,我不相信你,人们总是会犯愚蠢的错误。这就是为什么我们需要 SSCCE 来准确了解您在做什么。话虽如此,没有理由调用任何这些方法。当您从容器中添加/删除组件(您尚未执行此操作)时,将使用 invalidate()、validate()。当您更新模型时,模型负责通知 View ,以便 View 可以重新绘制自身。

but nothing changes on the GUI

您期望改变什么?

插入节点会将节点插入到模型中。如果父节点已展开,那么您应该看到插入的节点。但是,如果父节点折叠,您将看不到任何变化。

如果您想在插入节点后查看该节点,则可以使用tree.expandPath(...)方法。

当我插入包含字符串值的默认节点时,您发布的基本代码对我来说效果很好。也许问题是你的自定义节点?因此,您需要做的第一件事是创建一个与默认节点一起使用的 SSCCE。一旦成功,您就可以用自定义节点替换默认节点。如果有效的话,那就太好了。如果不是,您就知道问题出在您的自定义节点上。

根据提供的代码,它应该可以工作,因此您需要给我们更多的帮助。

关于java - 将注释插入 JTree 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4836723/

相关文章:

java - JTree - JLabel 更新

java - 如何解决JTree中的显示问题?

java - 混淆 WebMvcConfigurationSupport 和 WebMvcConfigurerAdapter

java - 如何在第二个窗口中更新 jFrame?

java - 在 JTable 中设置列​​的大小

java - 在 JTree 中,只有处理树才会扩展,但不会扩展树选择 - Java Swing

java - 是否有删除双向链表边的一半的名称?

java - 实现 spring security 时出现 xmlBeanDefinitionStoreException

java - 为什么Java类没有加载?

java - 如何删除之前创建的 JLabel?