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!回到实现自己的排序功能。。。