Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Eclipse plugin 如何最好地在TreeViewer上使用ViewerFilter?_Eclipse Plugin_Swt_Jface_Treeviewer - Fatal编程技术网

Eclipse plugin 如何最好地在TreeViewer上使用ViewerFilter?

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,它只选择偶数叶和包含偶数叶的分支。生

我正在将ViewerFilter应用于一棵只有几根树枝但大部分是树叶的树。过滤器使用叶中的属性,真正应用于叶。所有的树枝都保持不变,以便它们的叶子可以出现

但是,我希望过滤掉不包含选定叶的分支,并且我在ViewerFilter中看不到允许这种情况的机制

这可能吗

例如,给定下面的概念树,其中b是分支,a L是叶

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解决方案。当查看器有其他筛选器时,此解决方案的效果非常差。例如,对于工作区资源,当另一个筛选器已过滤掉某个文件夹中的所有资源时,此筛选器仍会将该文件夹报告为非空,因为此筛选器不知道另一个筛选器。