我申请一个ViewerFilter
几个分支的树,但大多离开了。 该过滤器真的适用于叶,用茶叶中的属性。 所有分支保持不变,这样它们的叶子可以出现。
不过,我想筛选出不包含选定的叶子的树枝,我可以看到内没有任何机制ViewerFilter
,允许这一点。
这是可能的呢?
例如,下面给出的名义树(其中b
是一个分支,一个L
是叶)
b0
b1
L2
L4
L8
b2
L1
L3
L5
我想申请一个ViewerFilter
只选择甚至树叶和树枝包含甚至叶子。 结果树将..
b0
b1
L2
L4
L8
..哪里分支b2
不显示,因为它不包含任何选择的孩子,但分支b0
和b1
做。
class MyFilter extends ViewerFilter{
private boolean isLeaf(Object element){
// implement this
}
private boolean isEvenLeaf(Object leaf){
// implement this
}
@Override
public boolean select(Viewer viewer, Object parentElement, Object element){
if (isLeaf(element))
return isEventLeaf(element);
else {
StructuredViewer sviewer = (StructuredViewer) viewer;
ITreeContentProvider provider = (ITreeContentProvider) sviewer.getContentProvider();
for (Object child: provider.getChildren(element)){
if (select(viewer, element, child))
return true;
}
return false;
}
}
}
也看看org.eclipse.ui.dialogs.FilteredTree
这对于孩子正确的事离开。
是的,如果你没有过滤掉的分支节点,它们会显示即使在它没有树叶。 如果你希望过滤器是永久的,有些东西你可以使用ITreeContentProvider作为过滤考虑。
由于内容提供商既有的getChildren()和hasChildren()方法,你有一点点更多的控制。
我不知道你所选择的叶子是什么意思。 如果您在视图中选择的意思,你可以通过调用Viewer.getSelection找到这个()。 您在过滤器的选择方法,通过在浏览器,父母,和叶。 您应该能够使用这个信息,如果选择了叶子来决定是否和他们过滤掉。 如果你可以给一些更多的信息,我也许可以用更详细的回答。