문제

나는 신청하고있다 ViewerFilter 몇 가지 가지의 나무에, 그러나 대부분 잎. 필터는 잎 내의 특성을 사용하여 잎에 실제로 적용됩니다. 모든 가지는 잎이 나타날 수 있도록 손대지 않았습니다.

그러나 선택한 잎이없는 가지를 걸러 내고 싶고 내면의 메커니즘이 보이지 않습니다. ViewerFilter 그것은 이것을 허용합니다.

이것이 전혀 가능합니까?

예를 들어 아래의 명목 나무가 주어지면 (어디에서 b 지점, a 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 ()을 호출하여 찾을 수 있습니다. 필터에서 구현하는 선택 메소드는 뷰어, 부모 및 리프에서 통과합니다. 이 정보를 사용하여 리프가 선택되었는지 여부를 결정하고 필터링 할 수 있어야합니다. 더 많은 정보를 줄 수 있다면 더 자세하게 대답 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top