SWT-JFace开发入门(二)

来源:互联网 发布:帝国cms 灵动标签 sql 编辑:程序博客网 时间:2024/05/18 11:45

SWT程序

SWT是一套独立的库,用户可以在SWT的基础上很容易地建立自己的应用,本节的目的就是要在SWT上建立一个简单的“Hello world”程序,读者可以在这个简单的程序上建立自己的应用。

加入SWT依赖的包

SWT为用户提供了一套API,用户如果要使用SWT进行开发,必须要把所需的Jar包放在Eclipse项目的ClassPath中。在此笔者采用新建一个插件项目,插件项目会自动引用SWT相关的包,步骤如下。

1. 运行Eclipse。
单击“File”→“New”→“Other”菜单项,在弹出的对话框中选择 Select 对话框左边的 Plug-in Development 向导。如图3所示,选择 Plug-in Project。


图3 新建插件对话框


2. 单击“Next”按钮,弹出新建对话框,输入项目名称。此处使用了“com.free.swtjface.demo”。单击“Next”按钮后弹出新建对话框页,如图4所示。


图4 新建项目


3. 单击“Next”按钮,在接下来的对话框中单击“Finish”按钮,建立一个空的插件项目在此项目中,Eclipse中已经自动引入了此插件所需要依赖的包,其中包括SWT/JFace所用到的包如图5所示。


图5 插件依赖的包


如果用户想加入SWT/JFace相关的包,也可以手动加入下面几个包“org.eclipse.swt.win32. win32.x86_*.jar”、“org.eclipse.swt_*.jar”和“org.eclipse.jface_*.jar”到插件的类路径中。

提示:对于初学者,通过创建插件项目自动引入SWT的jar包是一个比较好的方法,如果开发插件项目,用户也不用但心SWT的jar包没有引入的问题。

“Hello world”SWT程序

现在SWT所依赖的包已经加入到了项目的ClassPath中,SWT程序和Java的程序一样,也是通过main函数运行的,如例程1所示。

例程1 HelloWorldSwt.java

/*** 为了节省篇幅,所有的import类已经被注释* 读者可以通过ctrl+shift+o快捷键,自动引入所依赖的类* 如果有问题可发邮件到ganshm@gmail.com* */public class HelloWorldSwt {public static void main(String[] args) {Display display = new Display();Shell shell = new Shell(display);shell.setText("hello world! Window");shell.open();while (!shell.isDisposed()) {if (!display.readAndDispatch()) {display.sleep();}}display.dispose();}}

这段程序虽然很简单,但是它反映了书写SWT程序的步骤:
1. 创建一个Display对象。Display对象是SWT和操作系统通信的桥梁。
2. 创建一个或者多个Shell对象。可以认为Shell代表了程序的窗口。
3. 在Shell内创建各种部件(widget),如按钮、下拉框和列表等。
4. 对各个部件进行初始化(外观、状态等),同时为各种部件的事件创建监听器 (listener)。监听器可以监听窗口的消息,在此没有添加监听器,将会在后面的章节重点介绍监听器的注册。
5. 调用Shell对象的open()方法以显示窗体。
6. 对各种事件进行监听并处理,直到程序发出退出消息。
7. 调用Display对象的dispose()方法以结束程序。

提示:SWT程序的运行和例程1类似,读者如果不清楚SWT程序的运行机制,可以直接复制上面的样板代码就可以了。

运行SWT应用

SWT程序的运行要通过JNI调用相应的操作系统控件,运行SWT程序和运行Java应用程序有点不同,在Eclipse中用户可以选择运行SWT程序(SWT Application)可以运行SWT程序,步骤如下:
1. 打开Java的默认视图,在“Hello world”程序的文件上单击鼠标右键。
2. 选择“SWT Application”菜单,如图6所示。


图6 运行SWT程序


3. 单击“SWT Application”菜单运行,运行效果如图7所示。


图7 SWT“Hello world”程序


HelloWorldSwt程序只创建了一个窗口(shell),读者可以把shell当作其它组件的父窗口,创建其它组件。

提示:在Eclipse3.3以后,运行SWT程序和运行Java程序是一样的。