图 5. New Wizard Options 窗口

单击 Finish。Eclipse 将给新项目添加必要的类和库。
虽然还没完成,但是已经有了很好的开端并且准备好开始在向导背后添加一些实现。
Wizard 类和 INewWizard 接口
现在项目中有三个类:NewXHTMLFileWizard、NewXHTMLFileWizardPage 和 Activator。下面的部分将处理 NewXHTMLFileWizard 类。该类如清单 1 所示,不过没有显示方法中的所有代码。
清单 1. NewXHTMLFileWizard 类public class NewXHTMLFileWizard extends Wizard implements INewWizard { private NewXHTMLFileWizardPage page; private ISelection selection; public NewXHTMLFileWizard() { // snipped... } public void addPages() { // snipped... } public boolean performFinish() { // snipped... } private void doFinish( // snipped... } private InputStream openContentStream() { // snipped... } private void throwCoreException(String message) throws CoreException { // snipped... } public void init(IWorkbench workbench, IStructuredSelection selection) { // snipped... } }
实现 INewWizard 接口必须使用最后一个方法 init()。接下来,本文将介绍此方法以及此模板中自动包括的其余方法。
addPages() 方法
addPages() 方法将把页面添加到向导中。清单 2 中所示的方法将把单个页面添加到向导 NewXHTMLFileWizardPage 中。
清单 2. addPages() 方法将把页面添加到向导中 /** * Adding the page to the wizard. */ public void addPages() { page = new NewXHTMLFileWizardPage(selection); // You can add more pages here... addPage(page); }
NewXHTMLFileWizardPage 类包含为用户提供指定页面名称功能的控件。您可以稍后把控件添加到页面中,使最终用户可以输入更多信息。
performFinish() 方法
当用户单击向导中的 Finish 按钮时将调用 performFinish() 方法。在执行一些检查之后,它将使用 IRunnableWithProgress 接口调用 doFinish() 方法。使用此接口意味着在执行 doFinish() 方法时(在本例中需要花很长时间运行)不必编写显示进度条的所有 UI 元素。下面完整地列出了该方法。
清单 3. performFinish() 方法 /** * This method is called when 'Finish' button is pressed in * the wizard. We will create an operation and run it * using wizard as execution context. */ public boolean performFinish() { final String containerName = page.getContainerName(); final String fileName = page.getFileName(); IRunnableWithProgress op = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { doFinish(containerName, fileName, monitor); } catch (CoreException e) { throw new InvocationTargetException(e); } finally { monitor.done(); } } }; try { getContainer().run(true, false, op); } catch (InterruptedException e) { return false; } catch (InvocationTargetException e) { Throwable realException = e.getTargetException(); MessageDialog.openError(getShell(), "Error", realException.getMessage()); return false; } return true; }
(编辑:aniston)
|