JDT:Choose Source Container Dialog(选择src目录的功能)

源码位于org.eclipse.jdt.ui.wizards.NewContainerWizardPage类中,注意一下ElementTreeSelectionDialog对话框的使用。

// ------------- choose source container dialog
	/**
	 * Opens a selection dialog that allows to select a source container.
	 *
	 * @return returns the selected package fragment root  or null if the dialog has been canceled.
	 * The caller typically sets the result to the container input field.
	 * 

* Clients can override this method if they want to offer a different dialog. *

* * @since 3.2 */ protected IPackageFragmentRoot chooseContainer() { IJavaElement initElement= getPackageFragmentRoot(); Class[] acceptedClasses= new Class[] { IPackageFragmentRoot.class, IJavaProject.class }; TypedElementSelectionValidator validator= new TypedElementSelectionValidator(acceptedClasses, false) { public boolean isSelectedValid(Object element) { try { if (element instanceof IJavaProject) { IJavaProject jproject= (IJavaProject)element; IPath path= jproject.getProject().getFullPath(); return (jproject.findPackageFragmentRoot(path) != null); } else if (element instanceof IPackageFragmentRoot) { return (((IPackageFragmentRoot)element).getKind() == IPackageFragmentRoot.K_SOURCE); } return true; } catch (JavaModelException e) { JavaPlugin.log(e.getStatus()); // just log, no UI in validation } return false; } }; acceptedClasses= new Class[] { IJavaModel.class, IPackageFragmentRoot.class, IJavaProject.class }; ViewerFilter filter= new TypedViewerFilter(acceptedClasses) { public boolean select(Viewer viewer, Object parent, Object element) { if (element instanceof IPackageFragmentRoot) { try { return (((IPackageFragmentRoot)element).getKind() == IPackageFragmentRoot.K_SOURCE); } catch (JavaModelException e) { JavaPlugin.log(e.getStatus()); // just log, no UI in validation return false; } } return super.select(viewer, parent, element); } }; StandardJavaElementContentProvider provider= new StandardJavaElementContentProvider(); ILabelProvider labelProvider= new JavaElementLabelProvider(JavaElementLabelProvider.SHOW_DEFAULT); ElementTreeSelectionDialog dialog= new ElementTreeSelectionDialog(getShell(), labelProvider, provider); dialog.setValidator(validator); dialog.setComparator(new JavaElementComparator()); dialog.setTitle(NewWizardMessages.NewContainerWizardPage_ChooseSourceContainerDialog_title); dialog.setMessage(NewWizardMessages.NewContainerWizardPage_ChooseSourceContainerDialog_description); dialog.addFilter(filter); dialog.setInput(JavaCore.create(fWorkspaceRoot)); dialog.setInitialSelection(initElement); dialog.setHelpAvailable(false); if (dialog.open() == Window.OK) { Object element= dialog.getFirstResult(); if (element instanceof IJavaProject) { IJavaProject jproject= (IJavaProject)element; return jproject.getPackageFragmentRoot(jproject.getProject()); } else if (element instanceof IPackageFragmentRoot) { return (IPackageFragmentRoot)element; } return null; } return null; } 说明: IPackageFragmentRoot接口表示一组包段,并将各段映射至底层资源,它可以是文件夹、JAR或ZIP文件。此处是返回源码包,判断如下: (((IPackageFragmentRoot)element).getKind() == IPackageFragmentRoot.K_SOURCE


你可能感兴趣的:(JDT:Choose Source Container Dialog(选择src目录的功能))