有没有更好的方法来使用ILazyTreeContentProvider进行排序和过滤

Svi*_*len 5 eclipse swt jface

显然,如果ILazyTree(TreePath)ContentProvider不支持使用排序和过滤TreeViewers.因此,设置ViewerFiltersSorters/ComparatorsTreeView不会有任何好处.也许这与不了解所有元素有关,包括那些目前不可见的元素.

支持这个陈述的是来自org.eclipse.jface.viewers.TreeViewer类的javadoc摘录:

如果内容提供者是a ILazyTreeContentProvider或者 ILazyTreePathContentProvider,则必须使用{@link SWT#VIRTUAL}样式位创建基础树,树查看器将不支持排序或过滤,并且必须通过调用{@link #setUseHashlookup来启用哈希查找(布尔值)}.

我目前看到的唯一解决方案是为已经订购的每个节点获取子节点.如果您需要动态排序,即能够在运行时以desc或asc顺序切换排序顺序,那么您需要为此提出自己的解决方案,例如在填充和更新子项时监视排序的布尔标志.

你是否意识到可能有更好的解决方案,或许涉及更多jface API?

Von*_*onC 6

实际上,VIRTUAL-TreeViewer无论是使用IStructuredContentProvider还是懒惰,都无法进行排序,如本主题所述:

您必须自己进行排序(在您的模型中).
基本假设是元素甚至可能不在内存中.

e4中的情况可能会发生变化(来自2009年6月的此消息):

恕我直言,JFace虚拟表和树实现不如无虚拟实现 - 我远离它并在我的任何项目中使用它.

[...]因为从UI-Design的角度来看,向用户显示10.000个元素甚至更重要,因为模型停留在你的内存中显示JFace的大表可能会吃掉它是毫无意义的你所有的堆空间
(我们希望在E4中找到一套经过重新设计的Viewers来修复这些问题).
看到这个项目错误260451.
(更多的一般错误:167436262160)

马上:

我们在表格请求后在查看器中创建一个强引用.

恕我直言,它给用户提供了更好的选择: - 分页 - 智能过滤的可能性

而不是显示数百万个结果,然后例如在CDO(连接数据对象)的情况下,使用他们的新查询API在服务器上进行过滤.