Java 限制ElementTreeSelection对话框

Java 限制ElementTreeSelection对话框,java,swt,jface,Java,Swt,Jface,我想实现工作区浏览。我写下面的代码 ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog( Display.getDefault().getActiveShell(), new WorkbenchLabelProvider(), new BaseWorkbenchContentProvider()); dialog.setInput(Resou

我想实现工作区浏览。我写下面的代码

ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(
            Display.getDefault().getActiveShell(),
            new WorkbenchLabelProvider(),
            new BaseWorkbenchContentProvider());

dialog.setInput(ResourcesPlugin.getWorkspace().getRoot());
dialog.open();

如何将代码更改为仅显示包含.ecore文件的根元素项目或文件夹?当用户仅折叠显示的任何根元素.ecore文件时?

您可以在对话框中添加查看器过滤器以限制显示内容

dialog.addFilter(new FileExtensionFilter("ecore"));
添加一个过滤器

文件扩展名筛选器类似于:

public class FileExtensionFilter extends ViewerFilter {

  private String fTargetExtension;

  public FileExtensionFilter(String targetExtension) {
    fTargetExtension = targetExtension;
  }

  @Override
  public boolean select(Viewer viewer, Object parent, Object element) {
    if (element instanceof IFile) {
      return ((IFile)element).getName().toLowerCase().endsWith("." + fTargetExtension); 
    }

    if (element instanceof IProject && !((IProject)element).isOpen())
      return false;

    if (element instanceof IContainer) { // i.e. IProject, IFolder
      try {
        IResource[] resources = ((IContainer)element).members();
        for (IResource resource : resources) {
          if (select(viewer, parent, resource))
            return true;
        }
      } catch (CoreException e) {
        // Ignore
      }
    }

    return false;  
  }
}

这是基于org.eclipse.pde.internal.ui.util.FileExtensionFilter的,您应该在每次有问题时创建一个新问题,而不是完全更改旧问题。