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

Mar*_*wie 9 swt eclipse-plugin jface treeviewer

我正在申请ViewerFilter一棵树上的几棵树,但大多是树叶.过滤器确实适用于叶子,使用叶子内的属性.所有树枝都保持不变,以便它们的叶子可以出现.

但是我想过滤掉不包含选定叶子的分支,我可以看到其中没有ViewerFilter允许这样的机制.

这有可能吗?

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

b0
  b1
    L2
    L4
    L8
  b2
    L1
    L3
    L5
Run Code Online (Sandbox Code Playgroud)

我想申请一个ViewerFilter只选择甚至包含叶子的树叶和树枝.结果树将是......

b0
  b1
    L2
    L4
    L8
Run Code Online (Sandbox Code Playgroud)

..分支b2不显示,因为它不包含选定的子项,但分支b0b1do.

San*_*uri 13

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;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)