加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – 在JTree中隐藏/过滤节点?

发布时间:2020-12-14 05:56:43 所属栏目:Java 来源:网络整理
导读:我有一个TreeModel中的数据对象,我想在JTree中只显示其中的一部分 – 为了论证,说叶子和他们的父母.如何隐藏/过滤不必要的节点? 解决方法 我的最终实现: 有两个TreeModel,底层的和过滤的一个. 当底层的TreeModel发生更改时,从头开始重新生成已过滤的TreeMo
我有一个TreeModel中的数据对象,我想在JTree中只显示其中的一部分 – 为了论证,说叶子和他们的父母.如何隐藏/过滤不必要的节点?

解决方法

我的最终实现:

>有两个TreeModel,底层的和过滤的一个.
>当底层的TreeModel发生更改时,从头开始重新生成已过滤的TreeModel.克隆应该可见的每个节点,并将其添加到已过滤的TreeModel中的第一个可见祖先(或根目录中,如果没有可见祖先).见下面的codez,如果你好奇
>这有一个令人不幸的副作用,崩溃了用户打开的每个路径.为了解决这个问题,我添加了一个TreeModelListener到过滤的TreeModel.当模型更改时,我将保存扩展的路径在JTree(使用getExpandedDescendants()),然后重新扩展它们(使用SwingUtilities.invokeLater()).

我不得不在我正在使用的TreeNode类中重写equals(),以便新的克隆节点与旧的克隆节点相同.

...
  populateFilteredNode(unfilteredRoot,filteredRoot);
  ...

  void populateFilteredNode(TreeNode unfilteredNode,TreeNode filteredNode)
  {
    for (int i = 0; i < unfilteredNode.getChildCount(); i++)
    {
      TreeNode unfilteredChildNode = unfilteredNode.getChildAt(i);

      if (unfilteredChildNode.getType() == Type.INVISIBLE_FOLDER)
      {
        populateFilteredNode(unfilteredChildNode,filteredNode);
      }
      else
      {
        TreeNode filteredChildNode = unfilteredChildNode.clone();

        filteredNode.add(filteredChildNode);

        populateFilteredNode(unfilteredChildNode,filteredChildNode);
      }
    }
  }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读