Eclipse plugin 如何最好地在TreeViewer上使用ViewerFilter?
我正在将ViewerFilter应用于一棵只有几根树枝但大部分是树叶的树。过滤器使用叶中的属性,真正应用于叶。所有的树枝都保持不变,以便它们的叶子可以出现 但是,我希望过滤掉不包含选定叶的分支,并且我在ViewerFilter中看不到允许这种情况的机制 这可能吗 例如,给定下面的概念树,其中b是分支,a L是叶Eclipse plugin 如何最好地在TreeViewer上使用ViewerFilter?,eclipse-plugin,swt,jface,treeviewer,Eclipse Plugin,Swt,Jface,Treeviewer,我正在将ViewerFilter应用于一棵只有几根树枝但大部分是树叶的树。过滤器使用叶中的属性,真正应用于叶。所有的树枝都保持不变,以便它们的叶子可以出现 但是,我希望过滤掉不包含选定叶的分支,并且我在ViewerFilter中看不到允许这种情况的机制 这可能吗 例如,给定下面的概念树,其中b是分支,a L是叶 b0 b1 L2 L4 L8 b2 L1 L3 L5 我想应用一个ViewerFilter,它只选择偶数叶和包含偶数叶的分支。生
b0
b1
L2
L4
L8
b2
L1
L3
L5
我想应用一个ViewerFilter,它只选择偶数叶和包含偶数叶的分支。生成的树将是
b0
b1
L2
L4
L8
。。其中,分支b2不显示,因为它不包含选定的子级,但分支b0和b1显示。我不确定您所说的选定叶是什么意思。如果您的意思是在视图中选择,您可以通过调用Viewer.getSelection来找到这一点。在过滤器中实现的select方法在查看器、父级和叶中传递。您应该能够使用此信息来决定是否选择叶并将其过滤掉。如果你能提供更多的信息,我可能会回答得更详细。MyFilter类扩展了ViewerFilter{ 私有布尔isLeafObject元素{ //实施这个 } 私有布尔IsEventLeaf对象叶{ //实施这个 } @凌驾 公共布尔selectViewer查看器、对象父元素、对象元素{ 如果是孤岛 返回isEventLeafelement; 否则{ StructuredViewer sviewer=StructuredViewer查看器; ITreeContentProvider=ITreeContentProvider sviewer.getContentProvider; 对于对象子对象:provider.getChildrenelement{ 如果选择Viewer、element、child 返回true; } 返回false; } } }
是的,如果不过滤掉分支节点,即使其中没有叶子,也会显示它们。如果你想让过滤器永久存在,你可以考虑的是使用iReCeTeNePosivor作为过滤器。p>
由于内容提供程序既有getChildren方法,也有hasChildren方法,因此您有更多的控制权。还可以查看org.eclipse.ui.dialogs.FilteredTree,这是关于子对象的正确方法。与其说是叶子和分支,不如说是目录和文件。给定任意目录树,我希望只显示与*.foo匹配的文件。此外,我只想显示包含*.foo文件的目录,或者递归地显示包含*.foo文件的目录。不应显示不包含此类文件的目录。这有用吗?M.在这种情况下,在select方法中,您需要递归地启动元素,获取其子元素,直到达到偶数leafreturn true或end return false。我怀疑对于大量元素集合来说,此方法的运行时间相当糟糕。例如,所有资源都是一个工作区。我认为,对于每个资源,这将访问其包含的所有资源。因此它位于^2上。应该有一个On解决方案。当查看器有其他筛选器时,此解决方案的效果非常差。例如,对于工作区资源,当另一个筛选器已过滤掉某个文件夹中的所有资源时,此筛选器仍会将该文件夹报告为非空,因为此筛选器不知道另一个筛选器。