窗口小部件

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

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

Shell

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

父代和子代

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

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

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

样式位

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

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

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

资源处理

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

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

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

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