技术开发 频道

了解菜单、列表、组合、框表和树

  除了菜单的例子之外,本文中的所有例子都使用了一个叫做 BasicApplication 的基类,以简化它们的实现。作为另一个非常好的实践的例子,我将 SWT GUI 应用程序的一些常见功能应用到这个基类中(包括来自菜单示例的 helper 方法),以使它们更易于使用。

  BasicApplication 是一个合成物,它创建了自己的 shell。该类提供了一些额外的功能,比如退出确认对话框(参见图 8),以及将小部件树作为诊断帮助工具(diagnostic aid)转储出来的能力(参见清单 9 中一个经过删减的例子)。

  图 8. 确认消息对话框

  清单 9. 控件层次结构的打印输出(部分)

1 Shell {Tree1App Example}
2     Tree1App {}
3         Tree {}
4             TreeItem {<root>}
5                 TreeItem {Child.0}
6                     TreeItem {Child.0.0}
7                         TreeItem {Child.0.0.0}
8                         TreeItem {Child.0.0.1}
9                         TreeItem {Child.0.0.2}
10                     TreeItem {Child.0.1}
11                         TreeItem {Child.0.1.0}
12                         TreeItem {Child.0.1.1}
13                         TreeItem {Child.0.1.2}
14                     TreeItem {Child.0.2}
15                         TreeItem {Child.0.2.0}
16                         TreeItem {Child.0.2.1}
17                         TreeItem {Child.0.2.2}
18                 TreeItem {Child.1}
19                         :
20                 TreeItem {Child.2}
21                         :
22

 

  清单 10 显示了每个子类(来自 清单 4 中组合框和列表的例子)的 main 方法,并提供了 shell 的标题和大小、应用程序合成物的样式和所有命令行输入。

  清单 10. 示例列表应用程序的 main 方法

1 public static void main(String[] args) {
2      run(List1App.class.getName(), "List1App Example", SWT.NONE, 400, 300, args);
3 }
4

 

  每个通过 Java 反射技术加载的子类都必须定义一个构造函数和 completeGui 方法。子类可以选择性地提供 initGui 方法。再一次使用 清单 4 中的组合框和列表应用程序作为例子,这些方法如清单 11 中所示。

  清单 11. 应用程序子类中提供的所需要的方法

1 public List1App(Shell shell, int style) {
2     super(shell, style);   // must always supply parent and style
3 }
4 // Allow subclasses to complete the GUI
5 protected void completeGui(String[] args) {
6     // create GUI here
7     :
8 }
9 // Allow subclasses to initialize the GUI
10 protected void initGui() {
11     // finish GUI and add dynamic contents here
12     :
13 }
14

 

  MessageBox

  在结束本文的讨论之前,我将向您展示如何使用 MessageBox 控件请求用户输入选择的信息。

  必须将 MessageBox 定义为以下 5 种互斥样式之一:

  ICON_ERROR 表示一条错误消息。

  ICON_INFORMATION 表示一条信息消息。

  ICON_QUESTION 表示一条问题消息。

  ICON_WARNING 表示一条警告消息。

  ICON_WORKING 表示一条运行情况消息。

  MessageBoxes 支持其他一些可选样式,所有样式都表示了它们在按钮上的各自选择:

  OK, OK | CANCEL

  YES | NO, YES | NO | CANCEL

  RETRY | CANCEL

  ABORT | RETRY | IGNORE

  清单 12 显示了 MessageBox 一个典型用法,它在用户关闭应用程序 shell 时显示确认对话框,如 图 8 所示。

  清单 12. 使用 MessageBox 创建一个退出确认对话框

1 shell.addShellListener(new ShellAdapter() {
2         public void shellClosed(ShellEvent e) {
3             MessageBox mb = new MessageBox(shell, SWT.ICON_QUESTION | SWT.OK | SWT.CANCEL);
4             mb.setText("Confirm Exit");
5             mb.setMessage("Are you sure you want to exit?");
6             int rc = mb.open();
7             e.doit = rc == SWT.OK;
8         }
9 });
10

 

  结束语

  在 SWT 和 JFace 系列的第二期中,我介绍了更多的 SWT 控件:组合框、列表、表和树。我还展示了如何为 SWT 应用程序创建基类,以及如何使用 helper 方法使构建 GUI 变得更容易。

  本系列的下一期将向您展示如何创建更多的容器和输入控件,以及如何使用 StackLayout 布局管理器。

  代码下载os-jface2source.ZIP

0
相关文章