`

swt中的display对象和shell对象

    博客分类:
  • swt
阅读更多
转自:
http://blog.csdn.net/chulaixi/article/details/3095478

我们书写swt程序的步骤,这些步骤是:

1.      创建一个Display对象

2.      创建一个或者多个Shell对象,你可以认为Shell代表了程序的窗口。

3.      在Shell内创建各种部件(widget)

4.      对各个部件进行初始化(外观,状态等),同时为各种部件的事件创建监听器(listener)

5.      调用Shell对象的open()方法以显示窗体

6.      各种事件进行监听并处理,直到程序发出退出消息

7.      调用Display对象的dispose()方法以结束程序。

Display:与操作系统沟通的桥梁
我们在前面说过,每个swt程序在最开始都必须创建一个Display对象。Display对象起什么作用呢?它是swt与操作系统沟通的一座桥梁。它负责swt和操作系统之间的通信。它将swt/JFace的各种调用转化为系统的底层调用,控制操作系统为swt分配的资源。同时我们也可以通过Display对象得到操作系统的一些信息。

Display是一个“幕后工作者”,它为swt/JFace提供支持,但是你并不能够从某个用户界面中看到它的影子。

在前面的Hello,world!程序中,我们可以看到构建一个Display对象是和普通的Java对象一样通过构造函数实现的。它为实现图形界面准备了最基本的条件。而在程序结束时我们必须显式地调用dispose() 方法来释放程序运行中所获得的资源。一般来说,一个程序只需要一个Display对象,当然没有人禁止你创建多个Display对象。但是在swt的javadoc中,我们可以看到关于这个问题一些描述:

“Applications which are built with SWT will almost always require only a single display. In particular, some platforms which SWT supports will not allow more than one active display. In other words, some platforms do not support creating a new display if one already exists that has not been sent the dispose() message.”

Display有着众多的方法,我们不可能一一介绍。在这里只挑选几个可能会比较常用的作一些简单介绍。

l         setData()和getData():这一对函数允许我们为Display对象设定一些数据,setData()的参数中key和value类似于我们在使用Map对象中key和value的含义。

l         getShells()得到关联到该Display对象的所有没有dispose的Shell对象

l         getCurrent()得到与用户交互的当前线程

l         readAndDispatch()得到事件并且调用对应的监听器进行处理

l         sleep()等待事件发生

Shell:窗口
一个Shell对象就是一个窗口。你可以在上面放置各种部件创建丰富的图形界面。

我们都知道窗口有很多种,比如窗口有可以调整大小的,有不可以的,有的没有最大化最小化按钮。这些窗体的特征在swt中被成为风格(style)。一个窗体的风格可以用一个整数进行定义。这些风格的定义在org.eclipse.swt.SWT中。

Shell对象可用的风格包括:BORDER, CLOSE, MIN, MAX, NO_TRIM, RESIZE, TITLE , PLICATION_MODAL, MODELESS, PRIMARY_MODAL,S YSTEM_MODAL

这些风格我们不作一一介绍,你可以从他们字面意义看出一些含义来,当然也可以参考对应的javadoc。

我们可以在一个Shell的构造函数中定义它的风格,比如在前面的Hello,world!程序中,我们可以这样定义Shell。


Shell shell = new Shell(display,SWT.CLOSE | SWT.SYSTEM_MODAL);


最后得到的窗体没有最大化和最小化按钮,并且大小是固定不变的。

因为swt运行于各种平台之上,而这些平台上的窗口管理器千差万别,所以所有这些风格都不是肯定可以实现的。在swt的javadoc中,这被称为暗示(hints)。

Shell对象的方法大都和GUI有关,比如setEnabled()设定了窗体是否能够和用户进行交互,setVisble()设定了窗体是否可见,setActive()将窗体设为当前的活动窗口。

我们可以用open()方法打开一个窗体,close()方法关闭一个窗体。

小结
本节讨论了Display和Shell的一些概念,这是我们以后进一步了解swt的基础。在下一节中,我将介绍各种部件(widget)的用法,所谓部件,是指文本框,标签等UI实体。
分享到:
评论

相关推荐

    开发项目用SWING与RCP与SWT.JFACE的分析

    SWT对用户操作的响应,比如鼠标或键盘事件,也是采用了AWT和SWING中的Observer模式,在*.event包中可以找到事件监听的Listener接口和相应的事件对象,例如常用的鼠标事件监听接口MouseListener,MouseMoveListener和...

    RCP基本框架分析 Workbench是工作台,通俗地说就是代表用户界面的UI元素

    应用程序一般只需要一个Display对象,该对象实际上是一个SWT对象,代表了底层图形系统的实现。Display的主要任务是事件处理,它负责从操作系统的事件队列中读取事件,传递给RCP的事件监听器以便完成具体的任务。需要...

    org.eclipse.swt.win32

    org.eclipse.swt.SWT.class org.eclipse.swt.SWTError.class org.eclipse.swt.SWTException.class org.eclipse.swt.accessibility.ACC.class org.eclipse.swt.accessibility.Accessible.class org.eclipse.swt....

    Eclipse_Swt_Jface_核心应用_部分19

    1.5.2 SWT的优势和不足 8 1.6 SWT与JFace、Eclipse 9 1.6.1 JFace是SWT的扩展 9 1.6.2 Eclipse的UI界面基于JFace 10 1.7 本章小结 10 第2章 配置SWT开发环境 11 2.1 下载和安装Eclipse 11 2.1.1 ...

    Java SWT界面的托盘显示

    //点击关闭或者小化时程序不会退出而是...  final Shell shell = new Shell(display);  shell.setText("小化到系?托?");  //取消系?中??的??,????在托?不能?示  shell.setImage(display.getSystemImage(SW

    SWT(JFace)Group(分组显示)

    演示代码: 代码如下: package swt_jface.demo9; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.FillLayout;... import org.eclipse.swt.widgets.Shell; public class GroupExamples { Display d

    SWT(JFace) 打印功能

    演示代码如下: 代码如下:package swt_jface.demo11; import org.eclipse.swt.graphics.GC; import org.eclipse.... import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class Si

    SWT(JFace)体验之Sash(活动控件)

    import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Sash; import org.eclipse.swt.widgets.Shell; ...

    SWT(JFace)体验之List演示汇总第1/2页

    代码如下:DropDownAndSimple.java 代码如下:package swt_jface.demo3; import org.eclipse.swt.SWT;... import org.eclipse.swt.widgets.Shell; public class DropDownAndSimple { Display display = new D

    SWT(JFace)体验之StyledText类

    WrapLines.java 代码如下:package swt_jface.demo4;... import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widge

    SWT(JFace)体验之打开多个Form

    代码很简单,如下所示: 代码如下:package swt_jface.demo1; import org.eclipse.swt.SWT;... import org.eclipse.swt.widgets.Shell; public class Main { public static void main(String[] args) { Display display

    SWT(JFace)小制作 FileBrowser文件浏览

    代码如下: 代码如下:package swt_jface.demo6; import java.io.File; import java.util.Date; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics....

    SWT(JFace)体验之ViewForm的使用

    代码如下: 代码如下:package swt_jface.demo9;... import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; public class ViewFormExample { Di

    SWT(JFace)体验之Slider,Scale

    Slider: 代码如下:package swt_jface.demo8;... import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Liste

    JAVA程序开发大全---上半部分

    9.2.6 使用反向工程生成持久化对象、映射文件和DAO类 143 9.2.7 使用Hibernate功能 151 9.3 MyEclipse中Hibernate框架的高级操作 152 9.3.1 在Hibernate反向工程中定制映射关系 153 9.3.2 使用HQL编辑器 154 9.4 ...

Global site tag (gtag.js) - Google Analytics