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

时间:2009-11-26 10:58:46

标签: eclipse swt jface

显然ILazyTree(TreePath)ContentProvider不支持使用TreeViewers排序和过滤。因此,将ViewerFiltersSorters/Comparators设置为TreeView将无济于事。也许这与不了解所有元素有关,包括那些目前不可见的元素。

支持此声明的是javadoc摘自org.eclipse.jface.viewers.TreeViewer类:

  

如果内容提供商是   ILazyTreeContentProvider或   ILazyTreePathContentProvider,基础树必须是   使用{@link SWT#VIRTUAL}样式位创建,树查看器不会   支持排序或过滤,并且必须通过调用启用哈希查找   {@link #setUseHashlookup(boolean)}。

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

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

1 个答案:

答案 0 :(得分:6)

确实,VIRTUAL-TreeViewer无法使用IStructuredContentProvider或懒惰的JFace进行排序,如this thread中所述:

  

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

事情可能change in e4(来自2009年6月的这条消息):

  

恕我直言,{{1}}虚拟桌面和树实现不如虚拟虚拟桌面那么好 - 我远离它并在我的任何项目中都不使用它。

     

[...]虚拟表毫无意义,因为从UI-Design的角度来看,向用户展示10.000个元素是毫无意义的,因为模型更为重要   留在你的记忆中显示大桌子与JFace可能会吃掉   所有的堆空间
  (我们希望在E4中提出一套经过重新设计的观察者解决此类问题)。   请参阅this projectbug 260451   (更多一般的错误:167436262160

现在:

  

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

     

恕我直言,给予用户更好:    - 分页    - 智能过滤的可能性

     

而不是显示数百万的结果,在CDO (Connected Data Objects)的情况下,使用新的查询API在服务器上进行过滤。