每一个GUI程序的基础是window,在不同的操作系统上(图形方式),window有着不同外观、形式和操作方式。例如eclipse在 windows和linux下就表现出很多不同。在SWT中,提供了Display和Shell来解决这个问题。SWT的函数库高度抽象了window的显示及与底层操作系统之间的交互,程序只需要写一次,就能由SWT的原生函数库来处理不同平台间的差异。
Display,负责管理所有SWT的组件与底层操作系统之间的交互。一般来说是很少需要直接对显示设备进行操作的。
Shell,Shell的实例代表了当前的window,Shell可以直接被创建在显示设备或是另外一个Shell中。
创建一个window首先创建一个Display的实例,然后创建一个基于Display实例的Shell实例。示例代码如下:
[img]http://hiphotos.baidu.com/phoenix%5Fpb/pic/item/9f67792e47b30b424ec22631.jpg[/img]
另外建立一个AppRunner类来运行(后续的示例都可以由此类来运行)
[img]http://hiphotos.baidu.com/phoenix%5Fpb/pic/item/9f67792e47b90b424ec2262f.jpg[/img]
运行结果如下图
[img]http://hiphotos.baidu.com/phoenix%5Fpb/pic/item/095a5efafdb1b68558ee9032.jpg[/img]
其中
Display d = new Display();
Shell s = new Shell(d, SWT.CLOSE | SWT.RESIZE);
是用来创建Display和Shell实例的,Shell构造函数第一个参数是与Display的一个实例关联起来,第二个参数是指定显示窗口的样式,可以使用多个值组合来达到想要的效果。这些值都是定义在类SWT中的静态域。Shell还有一个构造函数 Shell(Display d),是不用指定样式的,系统将使用默认的样式。
比较常用的有:
SWT.BORDER 显示边框
SWT.CLOSE 显示关闭按钮
SWT.MIN 显示最小化按钮
SWT.MAX 显示最大化按钮
SWT.RESIZE 可以调整窗口大小
其他的值可以参考SWT的API。值得一提的是如果使用了操作系统不支持的样式,会被自动忽略掉,而不会产生任何错误。
Shell的setSize()方法用来指定要显示的window的大小,示例代码中是宽200像素,高200像素
Shell的open()方法用来在显示设备上显示window,如果不调用open方法,会发现没有任何window显示出来,虽然这个window已经在内存中被创建了。
Shell的isDispose()方法用来判断window是否已经被关闭
Display的readAndDispath()方法用来监听并分派Shell上产生的各种事件并分发给相应的处理程序
Display的dispose()程序用来释放创建Display实例时所占用的资源
Shell其他比较有用的两个方法是设定标题和图标,修改前面的代码如下:
[img]http://hiphotos.baidu.com/phoenix%5Fpb/pic/item/3e6bf7444599c990b3b7dc13.jpg[/img]
运行结果如下
[img]http://hiphotos.baidu.com/phoenix%5Fpb/pic/item/e5be380686079a6903088138.jpg[/img]
setText(String str)方法用来设置标题
setImage(Image img)方法用来设置应用程序的标题图标,其中的参数Image是org.eclipse.swt.graphics.Image类的实例,Image类的构造函数分别是Display的实例和图标资源的路径字符串。
用SWT创建GUI还是比较简单的,另外一个要提及的问题就是MDI程序,这在GUI程序里是很常见的,但是SWT目前不支持真正意义上的MDI,只能通过多个创建多个Shell的实例来模拟实现MDI。具体如何创建,网上也有很多资料,可以google或者百度一下。
Display,负责管理所有SWT的组件与底层操作系统之间的交互。一般来说是很少需要直接对显示设备进行操作的。
Shell,Shell的实例代表了当前的window,Shell可以直接被创建在显示设备或是另外一个Shell中。
创建一个window首先创建一个Display的实例,然后创建一个基于Display实例的Shell实例。示例代码如下:
[img]http://hiphotos.baidu.com/phoenix%5Fpb/pic/item/9f67792e47b30b424ec22631.jpg[/img]
另外建立一个AppRunner类来运行(后续的示例都可以由此类来运行)
[img]http://hiphotos.baidu.com/phoenix%5Fpb/pic/item/9f67792e47b90b424ec2262f.jpg[/img]
运行结果如下图
[img]http://hiphotos.baidu.com/phoenix%5Fpb/pic/item/095a5efafdb1b68558ee9032.jpg[/img]
其中
Display d = new Display();
Shell s = new Shell(d, SWT.CLOSE | SWT.RESIZE);
是用来创建Display和Shell实例的,Shell构造函数第一个参数是与Display的一个实例关联起来,第二个参数是指定显示窗口的样式,可以使用多个值组合来达到想要的效果。这些值都是定义在类SWT中的静态域。Shell还有一个构造函数 Shell(Display d),是不用指定样式的,系统将使用默认的样式。
比较常用的有:
SWT.BORDER 显示边框
SWT.CLOSE 显示关闭按钮
SWT.MIN 显示最小化按钮
SWT.MAX 显示最大化按钮
SWT.RESIZE 可以调整窗口大小
其他的值可以参考SWT的API。值得一提的是如果使用了操作系统不支持的样式,会被自动忽略掉,而不会产生任何错误。
Shell的setSize()方法用来指定要显示的window的大小,示例代码中是宽200像素,高200像素
Shell的open()方法用来在显示设备上显示window,如果不调用open方法,会发现没有任何window显示出来,虽然这个window已经在内存中被创建了。
Shell的isDispose()方法用来判断window是否已经被关闭
Display的readAndDispath()方法用来监听并分派Shell上产生的各种事件并分发给相应的处理程序
Display的dispose()程序用来释放创建Display实例时所占用的资源
Shell其他比较有用的两个方法是设定标题和图标,修改前面的代码如下:
[img]http://hiphotos.baidu.com/phoenix%5Fpb/pic/item/3e6bf7444599c990b3b7dc13.jpg[/img]
运行结果如下
[img]http://hiphotos.baidu.com/phoenix%5Fpb/pic/item/e5be380686079a6903088138.jpg[/img]
setText(String str)方法用来设置标题
setImage(Image img)方法用来设置应用程序的标题图标,其中的参数Image是org.eclipse.swt.graphics.Image类的实例,Image类的构造函数分别是Display的实例和图标资源的路径字符串。
用SWT创建GUI还是比较简单的,另外一个要提及的问题就是MDI程序,这在GUI程序里是很常见的,但是SWT目前不支持真正意义上的MDI,只能通过多个创建多个Shell的实例来模拟实现MDI。具体如何创建,网上也有很多资料,可以google或者百度一下。