SWT(Standard Widget Toolkit,标准窗口小部件工具包)本身仅仅是Eclipse组织为了开发Eclipse IDE环境所编写的一组底层图形界面 API。或是无心插柳,或是有意为之,至今为止,SWT在性能和外观上都超越了SUN公司提供的AWT和SWING。
SWT已经十分稳定,它最大化了操作系统的图形构件API。也就是说,只要操作系统提供了相应图形的构件,SWT就可以应用JNI技术调用它们,只有那些操作系统中不提供的构件,SWT才自己去做一个模拟的实现。
1.5.1 使用Shell创建窗口
本小节将创建第一个SWT程序(注意,本章的例子主要针对Windows平台,其他操作系统大同小异)。本实例是一个简单的窗口,在窗口中间显示“你好,SWT!”字样。通过学习和运行本实例,读者将掌握配置SWT API,编写和运行SWT程序的方法。
Display负责监管GUI的资源并管理和操作系统的通信,它不仅要关注窗口是如何显示、移动和重画的,还要确保诸如鼠标点击、键盘敲击等事件送达小部件并去处理它们。Display类不是可见的。
Shell类扮演着GUI主窗口的角色。一个Shell实例是一个可视化的应用,对主窗口的打开、激活、最大化、最小化和关闭保持追踪。Shell类的主函数为整合在GUI内的容器、小部件和事件提供了一个通用的接入点。从这一点讲,Shell的作用像是这些组件的父类。本例的运行效果是一个简单的SWT窗口。
本实例主要包括3部分,下面依次进行讲解。(JDK 1.6.0+Eclipse 3.2.0)
1.新建SWT项目
(1)单击【文件】菜单,依次选择【新建】|【项目】命令,弹出【新建项目】对话框。
(2)选择【Java项目】,单击【下一步】按钮。
(3)在【项目名】文本框中输入“SWT”,其他选项保持默认值,单击【完成】按钮。
2.引入SWT包
要编写SWT程序,需要引入SWT的jar包。Eclipse组织并不提供单独的SWT包下载。必须下载完整的Eclipse开发环境才能得到SWT包。SWT是作为Eclipse开发环境的一个插件形式存在。此插件名为$ECLIPSE\plugins\org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar。
(1)右击“SWT”项目,选择【属性】命令,弹出【SWT的属性】对话框。
(2)在左侧列表中选择【Java构建路径】选项,在右侧单击【添加变量】按钮,弹出【新建变量路径条目】对话框。
(3)单击【配置变量】按钮,弹出【首选项】对话框。
(4)单击【新建】按钮,弹出【新建变量条目】对话框。
(5)在【名称】文本框中输入“SWT_LIB”,单击【文件】按钮,弹出【选择Jar】对话框,选择$ECLIPSE\plugins\org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar。单击【打开】按钮,返回【新建变量条目】对话框,依次单击【确定】按钮。
此时,SWT_LIB变量已放入【构建路径上的JAR和类文件夹】列表框中,如图所示。
以下为添加SWT_LIB路径变量后的包资源管理器的结构视图:
3.编写程序
(1)右击“src”文件夹,依次选择【新建】|【包】命令,弹出【新建Java包】对话框。在【名称】文本框中输入“helloswt”,单击【完成】按钮。
(2)右击“helloswt”包,依次选择【新建】|【类】命令,弹出【新建Java类】对话框。在【名称】文本框中输入“Helloswt”,单击【完成】按钮。
(3)编写程序代码。代码如下:
package helloswt;
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.layout.*;
public class Helloswt {
public static void main(String[] args) {
Display display = new Display(); //创建Display实例
Shell shell = new Shell(display); //创建Shell实例
shell.setText("窗口"); //设置窗口的显示标签
shell.setBounds(200,200,500,350); //设置shell的显示范围
//设置窗口布局
FormLayout layout = new FormLayout();
layout.marginHeight = 50;
layout.marginWidth = 50;
shell.setLayout(layout);
//创建标签,用于显示"你好,SWT!"字样
Label helloLabel=new Label(shell,SWT.CENTER);//采用SWT.CENTER样式,即居中显示
helloLabel.setText("你好,SWT!");
shell.pack(); //以紧凑方式显示窗口并自动调节大小
shell.open(); //打开shell,类似于打开窗口
//开始事件处理循环,直到用户关闭窗口
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
4.配置本机图形库并运行程序
方法一:(第三步可选)
1> 解压 plugins目录下org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar 文件。
2>复制 swt-win32-3236.dll到“$Java\jre1.6.0\bin”目录下。
3>删除解压org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar 得到的文件夹。
单击【运行】按钮,即可运行Helloswt程序。
方法二:
在左侧“包资源管理器”中右击SWTà导入à常规|文件系统à下一步
从目录à浏览à选择D:\eclipse\configuration\org.eclipse.osgi\bundles\146\1\.cp后复选框选中swt-win32-3236.dllà完成。此处不同的Eclipse版本所对应的swt-win32-nnnn.dll版本及其所在的文件夹会有所不同。
单击【运行】按钮,即可运行Helloswt程序。
方法三:
用SWT编写的GUI与其所运行的平台的外观一致,速度也与本机程序相仿。这是因为SWT调用了操作系统自带的图形库,因此在运行程序时需指出本机图形库的位置。SWT本机图形文件名一般为swt-win32-nnnn.dll,这里的nnnn代表4位整数,它们位于$ECLIPSE\plugins\org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar包中,解压为swt-win32-3236.dll。为了确保这些库文件能被程序所用,可将本机图形库放进java.library.path变量所包含的任何目录中。
(1)解压org.eclipse.swt.win32.win32.x86_3.2.2.v3236.jar至任意目录,如D:\swt目录。
(2)右击“Helloswt.java”文件,依次选择【运行方式】|【运行】命令,弹出【运行】对话框。选择左侧的SWT应用程序,单击【新建】按钮,自动新建Helloswt项。在右侧选择【自变量】选项卡,在【VM自变量】文本框中输入“-Djava.library.path=D:\swt”,如图所示。
(3)单击【运行】按钮,运行Helloswt程序,结果如下图所示。