SWT —— Standard Widget Toolkit

1.1 SWT— Standard Widget Toolkit

        Standard Widget Toolkit (SWT) 即“标准小部件工具包”,SWT为Java 开发者提供了可移植的 API ,SWT和操作系统底层的本地GUI平台关系紧密。本质上,SWT是用Java语言对操作系统本地GUI的封装和绑定。

        在Eclipse 平台中,很多低层次用户界面编程任务是在较高层次上处理的,例如JFace viewer 和 action 实现了应用程序和小部件之间的交互。SWT是实现Eclipse界面的基础。

 

可以执行和平台集成

       SWT定义了通用的、可移植的、跨平台的API,SWT使用各个平台上的本地部件实现它的API,这使得SWT能够在所有平台上维护一个一致的编程模型,能够呈现底层操作系统图形用户界面,使得SWT部件能够对界面上的任何变化快速作出反应。

 

1.2 Widgets

      SWT包含很多富态特性,要实现有用和健壮的应用程序,需要学习和理解SWT核心部分——widgets, layouts 与events。

 

SWT 应用程序结构

        如果通过Eclipse 工作台扩展点创建用户界面,Eclipse工作台会处理SWT启动机制。如果是在Eclipse工作台之外写一个SWT程序,就需要更多的理解SWT应用程序的结构。

 

一个典型的独立的SWT应用程序包含如下结构:

  • 创建一个表示SWT Session的 Display  对象
  • 创建一个或多个Shell  对象,作为应用程序的主窗口
  • 在shell中创建需要的小部件
  • 初始化部件的尺寸和其他必要的状态,为部件注册事件监听器
  • 打开shell 窗口
  • 运行事件调度循环,直到程序退出,一般是用户关闭了主窗口Shell.
  • 销毁 display 对象

下面的代码片段展示了具体SWT程序结构:

public static void main (String [] args) {
      Display display = new Display ();  // Display
      Shell shell = new Shell (display);  // Shell

      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 ();
}

 

Display

        Display 对象关联SWT和底层平台GUI,主要用来管理平台事件循环,控制UI 线程和其他线程之间的交互。

 

        对于大多数SWT程序来说,可以遵循上面的模式,在创建任何窗口之前,必须创建一个display对象,关闭shell时销毁display 对象。除非是多线程应用,一般不用太多考虑display。

 

Shell

        一个Shell 就是一个操作系统平台窗口管理器管理的窗口,顶层shell 是作为 display 的孩子对象创建的,用户可以移动,改变大小,最大化和最小化这些窗口。另外一些shell 是作为其他 shell的子shell 创建的,这些窗口一般用做对话框窗口和其他临时窗口,存在于其他窗口上下文环境。

 

父子关系

        只要不是顶层shell,所有的widget部件都必须有一个parent,顶层shell 没有parent,但是和一个display关联,可以通过getDisplay() 访问 display。 所有其他的widgets都是顶层shell 的后代(直接或非直接)。

 

Composite widgets 是可以包含子元素的部件。

 

        可以把一个应用程序窗口看作一个wedgit树,或是层级,根是一个shell,根据应用的复杂度不同,shell可能只有一个子元素,或者拥有包含子元素的具有层级关系的多个composites。

 

设置样式 (Style bits)

        一些部件必须要在创建的时候设置属性,并且不能再进行修改,例如list列表,可能是单选或多选的,可能有或没有滚动条。

        一般是在构造方法中设置这些属性,所有widget部件的构造方法都有个设定样式的int 参数,这个int参数按 位或 的关系指定所有希望的样式。

        样式常量包含在SWT  类中,作为SWT  的public static 成员存在。

 

释放资源 (Resource Disposal)

        在SWT下面的底层平台要求明确分配和释放系统资源。为了保证和SWT 的设计思想——在部件工具包中反应平台应用程序结构——的一致性,SWT 要求明确释放 任何分配的操作系统资源。Widget.dispose() 方法用来释放和特定工具包对象关联的资源。

 

经验的做法是,如果你创建了一个对象,就必须销毁它,下面是一些具体的规则:

  • 如果你用构造方法创建了一个图像对象或部件,在用完之后必须明确的销毁它
  • 当一个Compsite销毁时,这个Composte和所有的子部件都会递归的销毁,在这种情况下,你不需要销毁部件。但是,必须释放任何与部件关联的图像资源
  • 如果不是通过构造方法获得的图形对象或部件,不需要销毁它,因为您并没有直接创建这个资源
  • 如果向其他对象传递了一个部件或图像对象的引用,必须注意在资源被使用时不要销毁
  • 如果创建了一个图形对象并在部件的生命周期中使用它,必须在部件销毁时销毁图形对象,可以为部件注册一个dispose listener,在dispose 事件触发时销毁图形对象

        并不是所有使用SWT中的类生产的对象都需要销毁,对于普通数据对象,例如 RectanglePoint ,它们没有使用操作系统资源,没有 dispose() 方法,不需要释放它们。

 

Reference:

http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/guide/swt.htm

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值