`

SWT/JFace专题 --- 对话框向导(Dialogs Wizards)

 
阅读更多
对话框向导(Dialogs Wizards)

对话框和向导通常被看做模态UI,它们限制用户输入请求的信息。模态UI通常用于程序在运行其他处理之前搜集和分发信息的场合,并且搜集和分发信息的过程不需要同其他的界面元素交互便可以完成;而视图和编辑器是非模态UI,用户可以自由地和工作台中的所有资源交互,并没有限定用户同它们的交互顺序。
-----------
对话框类别

SWT对话框和JFace对话框,它们是两种不同的对话框层次。
SWT对话框类(继承了抽象类org.eclipse.swt.widgets.Dialog)为作为SWT插件一部分实现的对话框提供了支持,如文件对话框、目录对话框,这些对话框自身就是SWT小部件,是内置平台对话框的Java表示,这意味着在不同的运行平台上,它们的内部实现可能不同。这些对话框为插件提供了与平台相适应的外观,因此,开发者只需要使用这些对话框即可。

JFace对话框是独立于平台的对话框(上面提到过,JFace舍弃了SWT的平台相关的部分,对一些常见的功能的封装,也就是说JFace相关的部件都是平台无关的),它们是向导页面,属性页面,首选项页面的实现基础。JFace支持开发者构建特定的对话框,在JFace对话框不能满足需求的情况下可以自定义实现。

1.SWT对话框

Eclipse实现的SWT对话框类提供了与底层平台特定对话框的平台无关性接口,它们都位于org.eclipsee.ui.swt.widgets包中。
SWT对话框有:
ColorDialog--提示用户从可用颜色的预定义集中选择一种颜色
DirectoryDialog--提示用户浏览文件系统,并选择或新建一个文件夹(SWT.SAVE表示新建文件夹,SWT.OPEN表示选择现有文件夹)
FileDialog--提示用户浏览文件系统,并选择或新建一个文件名(SWT.SAVE表示新建文件,SWT.OPEN表示选择现有文件)
FontDialog--提示用户从系统所有可用字体中选择一种字体
MessageBox--给用户显示一条消息
PrintDialog--提示用户选择一个打印机和开始打印任务之前的各种相关参数

2.JFace对话框

org.eclipse.jface.dialogs提供了一些实现标准对话框的类,所有这些对话框都是JFace抽象类Dialog的子类。Dialog类继承自Window类,二者的生命周期相似,不同于Window的是,Dialog已经定义好了对话框的基本框架,开发者不需要重写createContents()方法来创建内容,而应该重写createDialogArea(),createButtonBar(),createButtonsForButtonBar()三个方法来构建特定的对话框。

常用的JFace对话框:
它们位于org.eclipse.jface.dialogs和org.eclipse.ui.dialogs包中。
1)位于org.eclipse.jface.dialogs包的
MessageDialog--显示一条消息,可以显示一个合适的图像,图像选项:none,error,information,
question,warning
InputDialog--提供输入框,接收用户输入的值
ProgressMonitorDialog--执行长时间运行的任务需要提醒用户运行状态时,可以使用该对话
框。
ErrorDialog--向用户显示一个或多个错误,如果提供了错误的细节描述,便可以打开该描述。

2)位于org.eclipse.ui.dialogs包的
列表结构对话框:
ListDialog--提示输入元素列表外的一个元素的对话框。可以使用IStructuredContentProvider
提供元素及ILabelProvider提供元素标签
ListSelectionDialog--用于请求用户从列表中选择一个或多个列表项。使用getResult()返回结
果。
ElementListSelectionDialog--从元素列表中选择元素的对话框

树结构对话框:
CheckedTreeSelectionDialog--从树状结构中选择元素的对话框
ElementTreeSelectionDialog--从树状结构中选择元素的对话框。可定义验证器和过滤器来进
一步定义选择过程。

特殊对话框:
TwoPaneElementSelector--拥有两个窗格的列表选择对话框
YesNoCancleListSelectionDialog--允许用户选择“否”为结果的列表选择框(?)

资源相关对话框:
ResourceSelectionDialog--资源列表中选择对话框,并会传递用做列表根的资源和一个文本信
息。
ResourceListSelectionDialog--用于显示资源,其中资源列表带有一个文本项字段,该字段可
用来筛选列表资源
----------------
在构建自己的专用对话框之前,应该从两个包中寻找是否有可以满足需求的对话框,如果确实需要实现自己的对话框,可以扩展下列类中的一个:
-org.eclipse.jface.dialogs.Dialog
-org.eclipse.jface.dialogs.TitleAreaDialog
-org.eclipse.ui.dialogs.SelectionDialog

另外,当希望得到同Eclipse平台相同的外观和感觉时,应该尽可能的重用SWT对话框,例如需要配置颜色、字体、打开文件等操作时,使用SWT现有的对话框是最好的选择。
-------------------------
向导对话框

向导对话框(org.eclipse.jface.wizard.WizardDialog)是Dialog的一个专门子类,它作为向导中的顶级对话框,定义标准按钮并管理为它提供的一组向导页面。向导对话框使用IWizard接口来获得将要显示的页面,并向向导通知用户的交互。

向导(IWizard)负责控制向导的整体外观和行为。向导通常使用相应的DialogSettings来获取(和存储)向导页面上的控件设置的默认值。Wizard类提供了向导的默认实现,通常通过扩展Wizard类来实现特定向导的行为。向导的主要任务包括创建向导页面并将它们添加到向导中;实现当用户点击“Finish”按钮时处理相关的动作。
Wizard类比较重要的方法:
-addPages(),子类覆盖该方法,通过调用addPage()添加适当的页面。
-getDialogSettings(),返回该向导对话框的设置
-getPreviousPage(IWizardPage),返回指定向导页前面显示的向导页,如果没有则返回null
-getNextPage(IWizardPage),返回指定向导页后面显示的向导页,如果没有则返回null
-getStartingPage(),获得向导页中显示的第一个页面
-performFinish(),点击“Finish”按钮后,该方法被调用。

向导使用org.eclipse.jface.wizard.IWizardPage接口在它们包含的页面之间通信。

向导页面(IWizardPage)通常扩展WizardPage类来创建构成该页面内容的SWT控件。向导页面的任务是向用户展示页面信息、验证用户在该页面输入的信息是否正确,并指示用户在该页面的输入是否全部完成。
向导页面的一些重要方法:
-createControl(Composite),创建组成向导页的控件
-setPageComplete(String),设置该页面是否已完成,如果该页面已完成,则“Next”按钮(非
最后一页)和“Finish”按钮就会可用。
-setVisible(boolean),设置对话框页的可见性。子类可以扩展该方法来检测页面何时变为活动
页面。
---------------------------------------------
添加向导
用于向用户界面添加向导的扩展点有:
org.eclipse.ui.newWizard,org.eclipse.ui.importWizard,org.eclipse.ui.exportWizard
下面以newWizard为例说明:

添加org.eclipse.ui.newWizards扩展--》新建wizard-->实现向导,继承
org.eclips.jface.wizard.Wizard类,并实现init(),performFinish(),addPages()三个方法。

除了默认从“新建”菜单中启动新的向导外,还可以从代码中直接启动向导:
MyWizard wizard=new MyWizard();
wizard.init(PlatformUI.getWorkbench,null);
Shell shell=PlatforUI.getWorkbench.getActiveWorkbenchWindow.getShell();
WizardDialog dialog=new WizardDialog(shell,wizard);
dialog.open();
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics