小窗口

SWT 包含许多功能部件,但是系统的核心的基础知识 — 小窗口布局事件 — 都是实现有用而且功能强大的应用程序所需要的。

小窗口应用程序结构

当使用平台工作台扩展来添加用户界面元素时,用于启动 SWT 的机制是由工作台来处理的。

如果您正在从头(在工作台外部)编写 SWT 应用程序,则必须更多地了解 SWT 的应用程序结构。

典型的独立 SWT 应用程序具有下列结构:

以下代码片段改编自 org.eclipse.swt.examples.helloworld.HelloWorld2 应用程序。由于该应用程序只显示字符串“Hello World”,因此不需要向任何小窗口事件注册。

   public static void main (String [] args) {
      Display display = new Display ();
      Shell shell = new Shell (display);
      Label label = new Label (shell, SWT.CENTER);
      label.setText ("Hello_world");
      label.setBounds (shell.getClientArea ());
      shell.open ();
      while (!shell.isDisposed ()) {
         if (!display.readAndDispatch ()) display.sleep ();
      }
      display.dispose ();
   }

显示

显示表示 SWT 与底层平台的图形用户界面系统之间的连接。显示主要用来管理平台事件循环和控制用户界面线程与其它线程之间的通信。(有关用户界面线程问题的完整讨论,参见客户机的线程问题。)

对于大多数应用程序,可以遵循以上所使用的模式。在创建任何窗口之前必须创建显示,并且当关闭外壳程序时,您必须除掉显示。除非您正在设计多线程应用程序,否则,不需要太多考虑显示。

外壳程序

外壳程序是由 OS 平台窗口管理器管理的一个“窗口”。顶级外壳程序是作为显示的子代创建的那些外壳程序。这些窗口是在用户使用应用程序时移动、调整大小、最小化和最大化的窗口。辅助外壳程序就是作为另一个外壳程序的子代创建的那些外壳程序。这些窗口通常用作只存在于另一个窗口的上下文中的对话框窗口或其它瞬时窗口。

父代和子代

不是顶级外壳程序的所有小窗口都必须具有父代。顶级外壳程序没有父代,但是,它们是通过与特定显示相关联而创建的。可以使用 getDisplay() 来访问此显示。所有其它小窗口都是作为顶级外壳程序的子代(直接或间接)来创建的。

组合体小窗口是可以具有子代的小窗口。

当看到应用程序窗口时,可以将它看作小窗口树,或者看作层次结构,其根目录就是外壳程序。根据应用程序的复杂性,可以具有外壳程序的单个子代、几个子代或者具有子代的组合体的嵌套层。

小窗口生命周期

当应用程序创建小窗口时,SWT 将立即创建底层平台小窗口。因此,不再需要根据底层 OS 小窗口是否存在而执行不同操作的代码。它还允许将小窗口的大部分数据保存在平台层而不是在工具箱中复制。这就意味着工具箱的小窗口生命周期的概念必须符合底层图形用户界面系统的规则。

小窗口创建

创建小窗口时,大多数图形用户界面平台都要求您指定父代。由于只要您创建了工具箱小窗口,SWT 就会创建平台小窗口,因此,必须在构造函数中为小窗口指定父代小窗口。

样式位

某些小窗口属性必须在创建小窗口时在 OS 中设置,并且不能进行后续更改。例如,列表可以是单个或多个选择,并且可以具有滚动条也可以没有滚动条。

必须在构造函数中设置这些属性(称为样式)。所有小窗口构造函数都采用 int 自变量,该自变量指定所有期望样式的位宽 OR。在某些情况下,认为特定样式是一种提示,这意味着它可能在所有平台上都不可用,但是在不支持它的平台上将适当地忽略它。

样式常量作为公共静态字段存在于 SWT 类中。SWT 的“API 参考”中包含了每个小窗口类的可应用常量的列表。

资源处理

在 SWT 下面的 OS 平台需要显式地分配和释放 OS 资源。为了配合反映小窗口工具箱中的平台应用程序结构的 SWT 设计原理,SWT 要求您显式地释放已经分配的任何 OS 资源。在 SWT 中,Widget.ddispose() 方法用来释放与特定工具箱对象相关联的资源。

经验法则是,如果您创建对象,则您必须除掉它。以下进一步说明此原理的特定规则:

这些规则有一个例外。简单的数据对象(例如,矩形)不使用操作系统资源。它们没有 dispose() 方法,您也不需要释放它们。如果有疑问,则检查特定类的 javadoc。

有关本主题的进一步讨论,参见管理操作资源

Copyright IBM Corporation and others 2000, 2003.