如果标准对话框对于您的插件来说太简单,可以使用 Dialog 类来构建您自己的对话框。先前,我们已经了解了自述文件工具如何在操作集中添加“打开自述文件浏览器”操作。此操作集显示在工作台工具栏和窗口 -> 自述文件编辑器菜单中。
现在,我们准备在自述文件工具的 WindowActionDelegate 中了解此操作的实现。
public void run(IAction action) { SectionsDialog dialog = new SectionsDialog(window.getShell(), ReadmeModelFactory.getInstance().getSections(selection)); dialog.open(); }
操作集的窗口操作代表使用资源导航器视图(.readme 文件)中的当前选择来获取自述文件中各小节的列表。此列表和工作台窗口的 shell 传送至 SectionsDialog。
当用户选择该操作时,SectionsDialog 就会打开。
SectionsDialog 是通过对 org.eclipse.jface.dialogs 包中的 Dialog 类划分子类,从而在自述文件工具插件中实现的。
Dialog 类提供了对构建对话框 shell 窗口、创建常见对话框按钮以及启动对话框的基本支持。子类负责处理对话框本身的内容:
SectionsDialog 创建 SWT 列表,以显示各小节的列表。它使用 JFace 查看器来填充列表。(我们将了解查看器中的 JFace 查看器。)注意,我们的对话框不需要为对话框创建任何按钮,原因是这是由超类来完成的。
protected Control createDialogArea(Composite parent) { Composite composite = (Composite)super.createDialogArea(parent); List list = new List(composite, SWT.BORDER); ... ListViewer viewer = new ListViewer(list); ... return composite; }
protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(MessageUtil.getString("Readme Sections")); ... }
对话框既可以比较简单,也可以比较复杂,这取决于实际需要。实现对话框时,大多数对话框代码都与创建 SWT 控件(表示它的内容区域)和处理对话框打开时的任何必需的事件有关。一旦用户按了按钮,对话框就可以查询组成该对话框的各种控件(或查看器)的状态,以确定应该执行哪些操作。