或者: http://www.matrix.org.cn/resource/upload/forum/2005_10_09_104532_PWvvqDcRzr.rar
使用用向导建立一个SWT/JFace Java项目
(1)选择主菜单“文件→新建→项目”,弹出如下图6.2所示窗口。
图6.2 新建项目窗口
(2)选择“Designer”下的“SWT/JFace Java Project”项,单击“下一步”,弹出如下图6.3所示窗口。
图6.3 创建Java项目窗口
(3)填写项目名称“myswt”,项目布局选择第二个,单击“完成”。这时如果打开“java”透视图,可以看到多了一个名为“myswt”的项目,下方还排列着很多库引用,如下图所示窗口。
图 “java”透视图
注:
(1)其实写SWT程序也不是一定要重新建立这样一个新的项目,原来老的“myproject”项目依然可以继续使用的,但必须将SWT、JFace包及一些相关的包引用到Java构建路径中,手工一步步做这个工作太过于繁锁。有一个简单的方法:借助SWT Designer新建项目时保存在.classpath文件中的库引用,将其复制粘贴到myproject的.classpath中即可。
(2)当编写Java程序时,笔者认为“Java”透视图要比默认的“资源”透视图好用,主要是因为前者的包显示不是树状的,用起来较方便。但选择哪一种透视图,还是要看各人的习惯和喜好。本书以后的所讲内容将统一使用“Java”透视图。
6.3.2 导入SWT的原生库
想要运行Java应用程序,必须将SWT的原生包导入到项目中,否则该项目在运行程序时会报异常“java.lang.UnsatisfiedLinkError: no swt-win32-3063 in java.library.path”,并弹出图6.5所示的错误提示框。
图6.5 未导入SWT原生包时产生的错误提示框
导入SWT原生包的步骤如下:
(1)右键单击项目名“myswt”,在弹出菜单中选择“导入”,则会弹出如图6.6所示窗口。
图6.6 导入窗口
(2)选择“文件系统”后单击“下一步”,转到如图6.7所示窗口
图6.7 选择导入文件
(3)通过“浏览”按钮找到SWT原生库的路径(也可以直接输入路径文字),路径为“C:/eclipse/plugins/org.eclipse.swt.win32_3.0.1/os/win32/x86”。然后将“swt-win32-3063.dll”选上,单击“完成”,导入SWT原生包的设置结束。
6.3.3 新建一个SWT类文件
参阅“4.2节 创建Java项目并运行”所讲方法,新建一个类文件。
(1)在“Java”透视图的“包资源管理器”中,右键单击“com.swtdesigner”包,在弹出菜单中选择“新建→其他”,弹出如图6.8所示窗口。
图6.8 选择新建的类型
(2)选择“Designer→SWT→Application Window”,单击“下一步”,弹出如图6.9所示窗口。
图6.9 类文件的设置
(3)类的名称填“HelloWorld”,并选择“Create contents in(类代码的生成方式)”为第三项“public static main() method”(第三项生成的代码结构最简单),弹击“完成”。Eclipse将自动生成HelloWorld.java的代码,代码如下(注释为笔者手工加入):
package com.swtdesigner; //包名
import org.eclipse.swt.widgets.Display;//程序所用到的类都会用import标记在这里,
import org.eclipse.swt.widgets.Shell; //import的快捷键 Ctrl+Shift+O
public class HelloWorld { //一个标准的Java类HelloWorld
public static void main(String[] args) {
//display负责管理事件循环和控制UI线程和其他线程之间的通讯。
final Display display = Display.getDefault();
final Shell shell = new Shell(); // shell是程序的主窗口
shell.setSize(327, 253); //设置主窗口的大小
shell.setText("SWT Application"); //设置主窗口的标题
shell.layout(); //shell应用界面布置
shell.open(); //打开shell主窗口
while (!shell.isDisposed()) { //如果主窗口没有关闭,则一直循环
if (!display.readAndDispatch()) //如果display不忙
display.sleep(); //display休眠
}
}
}
从这个代码可以看到,创建一个典型的SWT应用程序需要以下步骤:
l 创建一个Display
l 创建一个或多个Shell
l 设置Shell的布局(3.5节将讲到布局的内容)
l 创建Shell中的的组件(注:本例还没有加入组件,只是一个空窗口)
l 用open()方法打开Shell窗口
l 写一个事件转发循环
l 销毁display
6.3.4 在主窗口加入一个文本框组件
如果运行HelloWorld.java,它还仅是一个空荡荡的主窗口。我们利用SWT Designer将一个SWT的文本框组件加入到主窗口中,操作步骤如图6.10所示。
图6.10 将文本框加入到主窗口的操作示意图
图中所示的操作步骤用文字描述如下:
(1)先将编辑器最大化。然后单击Eclipse的左下角的“Design”选项页,则编辑器由代码视图变成设计视图。
(2)选择SWT组件栏中“SWT Controls”分类下的“Text”组件,然后在主窗口上单击,将Text框放入。注意这里不是通常的将组件拖入到窗口。
(3)转到属性窗口,在“text”项里填写“HelloWorld”。单击Eclipse左下角的“Source”返回到编辑器的代码视图,代码如下:
package com.swtdesigner;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Text;
public class HelloWorld {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
shell.setText("SWT Application");
//------------------新插入的界面核心代码------------------------
Text text = new Text(shell, SWT.BORDER); //新建一个text对象
text.setText("HelloWorld"); //给text文本框设置初始文字HelloWorld
text.setBounds(88, 94, 100, 25); //设置文本框的位置和大小,(x轴坐标,y轴坐标,宽度,高度)
//------------------END---------------------------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
6.3.5 运行HelloWorld.java
选择主菜单“运行→运行方式→Java应用程序”,运行界面如图6.11所示:
图6.11 HelloWorld的第一次运行界面
以上的程序例子还是比较简单的,如图6.12所示,给出一个稍微标准些的界面,并给出了各类和界面之间的对应关系。注:在SWT中check框(复选框)也是一种Button。
图6.12 界面和类之间的对应关系图
其中Display和Shell的谱系图如图6.13所示,Group和Button在3.3节有介绍。
图6.13 Display和Shell的谱系图
关于SWT/JFace例程的说明
由于SWT/JFace应用程序例子的整体代码结构都基本一样,如下:
package com.swtdesigner;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Text;
public class HelloWorld {
public static void main(String[] args) {
final Display display = Display.getDefault();
final Shell shell = new Shell();
shell.setSize(327, 253);
shell.setText("SWT Application");
//----------------新插入的界面核心代码----------
…… ……
//----------------END------------------------
shell.layout();
shell.open();
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
}
}
为了节省篇幅,以后的例子一般都会省略上面代码框架前后部份,只给出中间省略号处的核心代码,要想得到完整的代码请查阅本书随书光盘中的例程。
6.5 实践建议
SWT Designer还无法完成所有的界面设计工作,所以在界面开发中依然是以手工写代码为主,而且手写代码某些时候比界面拖拉操作更快捷。以下是笔者在使用SWT Designer开发界面时的基本流程:
l 新开一个临时的Application文件,用SWT Desiger快速做好开发所需要的部份界面。
l 将自动生成的代码移植到正式项目中,进行手工修改和代码精简。
另外,由于SWT Designer不是很稳定,所以在使用时还应注意:
l 不要在界面中加入太多组件。
l 不要频繁的移动组件,或者删除又添加组件,否则很可能因为内存耗尽而死机。
6.6 本章小结
本章主要介绍了SWT的一些基本知识,并且用SWT Designer开发出了本书的第一个SWT程序。通过这章的学习,读者对SWT有一个初步的认识,并了解到了如何用SWT Designer来开发SWT程序。
http://lihongjun.blog.ccidnet.com/blog/ccid/do_showone/tid_117090.html