刚刚看过 狐狸蔡(foxcai) 的 《深入内幕之消息机制探秘》 解答了我心中的疑惑。
原文章 链接地址 http://blog.csdn.net/foxcai/articles/772856.aspx
Display 对象
看来在SWT 程序中 创建 Display 对象就是创建WINDOWS 的消息管理层(有人称 Display 是 SWT 连接WINDOWS原生功能的接口,似乎不太准确) 它的作用类似于WinSDK 中的 WinMain 主程序过程。 创建了 Display 对象 就实现了对WINDOWS 消息的监听功能,下一步就是等待所观注的某类消息的发生。
参考其他文章所述:
概括的讲Display是与操作系统沟通的桥梁
每个swt程序在最开始都必须创建一个Display对象。它是swt与操作系统沟通的一座桥梁。它负责swt和操作系统之间的通信。它将swt/JFace的各种调用转化为系统的底层调用,控制操作系统为swt分配的资源。同时还可以通过Display对象得到操作系统的一些信息。
Display是一个“幕后工作者”,它为swt/JFace提供支持,但是无法从用户界面中看到它的痕迹。
构建一个Display对象是和普通的Java对象一样通过构造函数实现的。它为实现图形界面准备了最基本的条件。而在程序结束时我们必须显式地调用dispose() 方法来释放程序运行中所获得的资源。
一般来说,一个程序只需要一个Display对象,当然也可以创建多个Display对象。
Display有着众多的方法,比较常用的有如下几个。
·setData()和getData():这一对函数允许我们为Display对象设定一些数据,setData()的参数中key和value类似于我们在使用Map对象中key和value的含义。
·getShells()得到关联到该Display对象的所有没有dispose的Shell对象
·getCurrent()得到与用户交互的当前线程
·readAndDispatch()得到事件并且调用对应的监听器进行处理
·sleep()等待事件发生
Shell 对象
Shell 对象实际是实现对 Windows 窗口类的注册并创建窗口,在创建Shell 对象时就可以在构造函数的参数中指定 Windows 窗口的样式。
当Shell 对象创建完成时就说明窗体被创建生成,此时的 Shell 对象可以被视为窗体的代表,而各种widgets 类的控件对象也就可以向窗体中添加了。
参考其他文章所述:
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
可以在一个Shell的构造函数中定义它的风格,例如下面的语句。
Shell shell = new Shell(display,SWT.CLOSE | SWT.SYSTEM_MODEL);
该窗体没有最大化和最小化按钮,并且大小是固定不变的。
注意:swt运行于各种平台之上,而这些平台上的窗口管理器千差万别,所以所有这些风格都不是肯定可以实现的。在swt的javadoc中,这被称为暗示(hints)。
Shell对象的方法大都和GUI有关,比如setEnabled()设定了窗体是否能够和用户进行交互,setVisble()设定了窗体是否可见,setActive()将窗体设为当前的活动窗口,用open()方法打开一个窗体,close()方法关闭一个窗体。