为什么当 TreeModel 添加新节点时我的 JTree 不更新?

2024-03-27

我正在使用一个DefaultTreeModel填充了覆盖DefaultMutableTreeNode它支持选择性地更改树中节点的显示字符串。如下面的代码所示,在我的表单中,我通过在单独的类中创建新节点来填充树,然后通过主数据类型的包装类将它们传递进去。那里的过程是创建一个新的覆盖DefaultMutableTreeNode,向其中添加子项(每个AccessPoint由具有多个子节点的节点表示),然后将其存储以供以后在 UI 中使用。

我第一次以这种方式添加节点时,效果非常好。添加以下代码的任何后续节点实际上都存储在DefaultTreeModel,但是JTree未使用新节点进行更新。

为什么说JTree添加第一个孩子后没有填充?

private void populateAccessPointTreeModel(AccessPointDataWrapper wrapper) {
    //the pre-created DefaultMutableTreeNode subclass instance is
    // stored in the wrapper
    DefaultMutableTreeNode accessPointNode =
            wrapper.getAccessPointTreeNode();
    //this line updates the accessPointTree with the new node (I've looked at the
    // value in debug mode, and it does in fact add the node
    ((DefaultMutableTreeNode) accessPointTree.getRoot()).add(accessPointNode);
    //unrelated logic happens down here...
}

如有必要,我可以在创建节点的位置包含代码,但我认为这不是问题。


问题是DefaultMutableTreeNode不告知DefaultTreeModel它的子项已更新。为此,您需要调用表模型中的适当方法(nodesChanged或类似)或(最好)使用DefaultTreeModel.insertNodesInto method.

DefaultTreeModel model = (DefaultTreeModel)accessPointTree.getModel();
DefaultMutableTreeNode root = model.getRoot();
model.insertNodeInto(accessPointNode, root, root.getChildCount());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么当 TreeModel 添加新节点时我的 JTree 不更新? 的相关文章

随机推荐

  • 动态更改列名

    我有一个标题 详细信息自定义屏幕 我在其中根据标题中的下拉选择来操作显示哪些网格列 这工作得很好 但现在我也想更改一些列名称 使用记录的语法 我无法让它工作 我看不出我做错了什么 似乎没有什么区别 我已经附加到进程并在这个事件上设置了一个断
  • 为什么在编译器选项中添加搜索目录后,标准库头内会报告错误?

    我在 CodeBlocks MinGW32 中有一个项目 其设置如下 Foo src somefile1 cpp Foo src somefile2 cpp Foo src somefile1 h 标头是这样包含的 include some
  • JSON.stringify 使用 Knockout JS 变量的对象

    当前场景 function Employee data var self this variables this Forename ko observable data Forename this Surname ko observable
  • __invert__ 方法

    目的是什么 invert 方法 我在探索 Python 内部结构时发现 gt gt gt dir builtins int abs add and bool ceil class delattr dir divmod doc eq floa
  • R - 图例中组合geom_vline和geom_smooth

    添加时我在图例中遇到一些奇怪的行为geom smooth and a geom vline 在我的 ggplot2 图表中 这是一个可重现的示例 library ggplot2 n lt 60 set seed 123 df lt data
  • 如何在给定角度的椭圆轮廓上获取点?

    因此 我给出了椭圆 它们由中点 水平半径 rh 和垂直半径 rv 定义 我使用 sin cos 绘制它们 结果对我来说看起来相当不错 只是确保这不是错误源 现在假设我有一个给定的角度 或方向向量 并且我希望椭圆轮廓上的点具有该角度 方向 我
  • 使用 XPath 选择根和子匹配表达式

    我正在使用 Nokogiri 来解析一些类似于以下内容的 XML
  • 自动调整 div 容器 html 中表格中的列大小

    我正在寻找一种解决方案 最好是在 css 或 html 中 以便我的位于 div 容器内的表格能够压缩其 以便在调整浏览器大小时它们保留在 div 容器内 http lux physicals ucdavis edu public new
  • 这个符号在 IntelliJ 中意味着什么? (文件名左下角红色圆圈,里面有“J”)

    在我创建的 Java 项目的 IntelliJ 的目标文件夹下 包中有一些 java 源文件 每个文件旁边的 J 图标都有一个红色圆圈 中间有一条线 这意味着什么 我如何解决它 您需要指定源目录 File gt Project Struct
  • 使用面板消息/解决方法时的 Java 1.5 JOptionPane 绘制错误?

    我有一个 JOptionPane 其中有一个自定义消息面板 位于面向 Java 1 5 的应用程序中 除其他内容外 该面板还包含一个 JTextField 每调用 20 次左右 对话框中就不会绘制任何内容 甚至 确定 取消 按钮也不会绘制
  • 让 docker-compose 只运行某些容器

    所以我目前可以使用 docker compose up test 它只运行我的数据库和测试脚本 我希望能够说 docker compose up app 或类似的东西来运行除测试之外的所有内容 这样我就不会运行不必要的容器 我不确定是否有办
  • 获取任意文件的二进制值

    如果假设我有一个文件 例如music mp3 or image jpg或任何要考虑的文件 我如何将这些文件的二进制表示形式转换为java中的字符串值 以便我可以查看它 例如 假设我有一个名为 video mp4 那么它必须表示为101011
  • Flask 和 Jinja2 使用漂白剂,图像 HTML 无法正常工作

    我一直在为自己的一个项目创建一个小博客 只有我作为用户才能访问发布页面 我之前一直在关注 Flask 教程 该教程的最终产品使您能够使用漂白剂和 Markdown 发布 HTML 并通过 Jinja2 模板传递它 In my models
  • Dockerfile 中的 AWS 凭证

    我需要在容器构建期间从 AWS S3 下载文件 但是我未能成功向构建过程提供 AWS 凭证 而无需将它们实际硬编码到 Dockerfile 中 我收到错误 docker 致命错误 无法找到凭据 尽管之前已经执行过 AWS 配置 此外 我无法
  • Intellij idea 中的 Ruby 设置

    这可能是显而易见的 但我无法在 Intellij 项目设置 编译器 插件等中找到 ruby 解释器路径以及任何其他可用的 ruby 设置 我确实安装了最新版本的 ruby 插件 并且使用的是 intellij 12 0 4 Ultimate
  • OOP 中的 php uasort

    class DBNews public function get latest posts limit code goes here posts array array uasort posts array this gt cmp publ
  • 在动作脚本 3 flex 4 中使用 DisplayObject(Group ,UIComponent) 剪切复制粘贴

    我正在我的应用程序中实现剪切复制粘贴 例如cacoo http www cacoo com 但我在这些操作过程中遇到问题 我正在使用剪切复制粘贴背后的想法 var className String getQualifiedClassName
  • 使用 Git 复制子模块

    我在 Git 中有一个项目 它有几个子模块 我需要下载这些子模块和可用的文件才能使用主项目 并且为了使子模块工作 我需要它们自己的子模块可用等等 为了进行设置 我使用递归地初始化子模块git submodule update init re
  • 具有三级深度连接的范围

    My Program桌子有很多Measures My Measure桌子有很多Targets My Target表有一列名为 money 我的 ActiveRecord 查询如下所示 programs2 Program includes m
  • 为什么当 TreeModel 添加新节点时我的 JTree 不更新?

    我正在使用一个DefaultTreeModel填充了覆盖DefaultMutableTreeNode它支持选择性地更改树中节点的显示字符串 如下面的代码所示 在我的表单中 我通过在单独的类中创建新节点来填充树 然后通过主数据类型的包装类将它