Eclipse 有没有更好的方法使用ILazyTreeContentProvider进行排序和筛选

Eclipse 有没有更好的方法使用ILazyTreeContentProvider进行排序和筛选,eclipse,swt,jface,Eclipse,Swt,Jface,显然,如果使用ILazyTree(TreePath)ContentProvider,则TreeViewers不支持排序和筛选。因此,将ViewerFilters或sorter/Comparators设置到树视图中不会有任何好处。也许这与不了解所有元素有关,包括目前不可见的元素 为了支持这一说法,这里有来自org.eclipse.jface.viewers.TreeViewer类的javadoc摘录: 如果内容提供商是 ILazyTreeContentProvider或 ILAYTREEPATHC

显然,如果使用
ILazyTree(TreePath)ContentProvider,则
TreeViewers
不支持排序和筛选。因此,将
ViewerFilters
sorter/Comparators
设置到树视图中不会有任何好处。也许这与不了解所有元素有关,包括目前不可见的元素

为了支持这一说法,这里有来自
org.eclipse.jface.viewers.TreeViewer
类的javadoc摘录:

如果内容提供商是
ILazyTreeContentProvider
ILAYTREEPATHContentProvider
,基础树必须是 使用{@linkswt#VIRTUAL}样式位创建的树查看器不会 支持排序或筛选,必须通过调用 {@link#setUseHashlookup(布尔)}

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


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

事实上,无论您使用的是
IStructuredContentProvider
还是惰性的,都无法对
虚拟TreeViewer进行排序,如中所述:

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

事情可能(从2009年6月的这条消息):

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

[…]拥有虚拟表是毫无意义的,因为从UI设计的角度来看,向用户显示10.000个元素是毫无意义的,更重要的是,模型 停留在你的记忆中,显示带有JFace的大桌子可能会吃掉你 您所有的医疗空间
我们希望在E4中重新设计一组观众来解决这些问题。
请参阅和。
(更多通用错误:和)

现在:

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

IMHO最好给用户: -寻呼 -智能过滤的可能性

而不是显示数以百万计的结果,例如,如果使用新的查询API在服务器上进行筛选


我明白了,所以直接从源代码开始——“您必须自己(在您的模型中)进行排序”。谢谢你指出这一点,VonC!回到实现自己的排序功能。。。