解决方法
我的最终实现:
>有两个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); } } }
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。