سؤال

وأنا تطبيق 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 (). وحدد الطريقة التي تنفذ في الفلتر يمر في المشاهد، والأم، ورقة. يجب أن تكون قادرا على استخدام هذه المعلومات لتحديد إذا تم تحديد ورقة أو لا وتصفية بها. إذا كنت يمكن أن تعطي بعض مزيد من المعلومات، لا أستطيع الإجابة ربما مع مزيد من التفاصيل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top