6

显然,如果ILazyTree(TreePath)ContentProvider不支持使用排序和过滤TreeViewers。所以设置ViewerFilters或设置Sorters/Comparators你的 TreeView 不会有任何好处。也许这与不知道所有元素有关,包括那些目前不可见的元素。

为了支持这个声明,这里是类的 javadoc 摘录org.eclipse.jface.viewers.TreeViewer

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

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

您是否知道可能有更好的解决方案,可能涉及更多的 jface API?

4

1 回答 1

7

VIRTUAL-TreeViewer实际上,无论您使用 aIStructuredContentProvider还是惰性排序,都无法进行排序,如该线程中所述:

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

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

恕我直言,JFace虚拟表和树的实现不如非虚拟的好——好吧,我远离它,在我的任何项目中都没有使用它。

[...] 拥有虚拟表格毫无意义,因为从 UI 设计的角度来看,向用户展示 10.000 个元素是毫无意义的,甚至更重要的是,因为模型驻留在您的内存中,显示带有 JFace 的大表格可能会吃掉占用所有堆空间
我们希望在 E4 中提供一组重新设计的查看器来解决此类问题)。
请参阅此项目错误 260451
(更多一般错误:167436262160

现在:

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

恕我直言,它更好地为用户提供: - 分页 - 智能过滤可能性

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

于 2009-11-26T12:15:25.923 回答