写在前面的话
终于决定提起笔来写一篇关于
swt
和
JFace
编程的文章。在开始之前,我想先介绍一下你能够从将要出现的这一系列文章里得到什么,以及更重要的,你不能得到什么。我们的时间是如此之重要,以至于我们很难容忍把它浪费在自己不关心的事情上。
因为我刚开始写,所以到底这些文章会分成几次发布出来,也很难讲。但是我心里大体有这样一个提纲。也就是说,我打算介绍以下方面的内容:
l
设定
swt
以及
JFace
的开发环境
l
swt
的一些简单部件(
widget
)介绍
l
JFace
的一些入门性介绍
l
swt
和
JFace
的事件模式
l
通过一些简单的例子说明如何利用
swt
和
JFace
编写图形化应用程序
我还要说明一下你不能从本文中得到的信息,这些信息包括:
l
swt
和
JFace
相关内容非常深入的介绍:正如你从题目中了解到的,本文的定位是“入门”,也就是说假定的读者是那些对
swt
和
JFace
开发没有什么了解的人。所以我并不打算进行一个深入的介绍。因为我相信在入门之后,他们能够找到更好的资料(此外,我可能会写另外一个系列文章来介绍)。
l
eclipse
的使用:我假定你在读这篇文章的时候已经对
eclipse
有所了解,所以不会解释到具体
eclipse
如何使用。
l
eclipse
插件开发:虽然
eclipse
插件开发和本文内容有着千丝万缕的联系,我决定还是不把它列为介绍的内容。这方面,你仍然可以找到相当多的资料供参考。
与作者联系
如果你希望和我联系的话,你可以发
email
到jayliu@mail.csdn.net
。
延伸阅读
你不知道什么是
eclipse
么?你可以打开
http://www.eclipse.org
,这是
eclipse
的官方站点。
如果你希望对
eclipse
功能有详细的了解,你可以读一下这本书《
CONTRIBUTING TO ECLIPSE
》。
你不知道什么是
swt/JFace
么?你可以看一下
Wikipedia
中的介绍:
http://en.wikipedia.org/wiki/Swt
http://en.wikipedia.org/wiki/Eclipse_%28computing%29
你对
eclipse
,swt
的历史感兴趣么?我强烈推荐你看一下这篇八卦:
http://www.csdn.net/news/newstopic/20/20433.shtml
如果你对
eclipse
的一些新闻比较感兴趣的话,可以关注一下大胃的
blog:
http://www.blogjava.net/sean/
最后你可以从一个地方得到所有你想要的东西:
http://www.google.com
OK
,介绍到此为止,下面我开始正文:
Hello,world!:
搭建一个
swt/JFace
开发环境
在前面我曾经提到过:我们假定你对
eclipse
开发有一些了解。所以在这一节中,我将示范如何搭建一个
swt/JFace
开发环境,并且用一个老掉牙的
Hello,world!
程序作为示范。
建立开发环境
你完全可以不使用
eclipse
,而是使用别的
IDE
来进行开发,但是你需要有
swt/JFace
的一些库文件。
为了能够进行正常的
swt/JFace
开发,你需要做以下工作:
第一步
:建立一个
Java
工程:因为这个是大家都非常熟悉的,所以就不再赘述,你可以建立一个任何名字的
Java
工程。
第二步
:导入
swt
以及
JFace
的库文件。这也就意味着:将
swt/JFace
相关的库文件导入到工程的
classpath
中去。
需要的库文件有哪些呢?打开
eclipse
安装目录下的
plugins
文件夹,我们需要找到以下
jar
文件:
l
org.eclipse.swt_3.x.x.jar
l
org.eclipse.jface_3.x.x.jar
l
org.eclipse.core.runtime_3.x.x.jar
l
org.eclipse.ui.workbench_3.x.x.jar
这就是我们搭建一个基本
swt/JFace
程序所需要基本的一些库文件了。其中
3.x.x
视你所使用的
eclipse
版本而定,譬如我的
eclipse
版本是
3.1M6
,这些
3.x.x
就是
3.1.0
。将他们加入你程序的
classpath
中。
为了更加清楚地说明如何做,你可以看一下下面的图
1
。这是我在
eclipse
的做法:打开工程的
properties
对话框,然后选择
Java Build Path
中的
Libraries
选项卡,将这些
jar
导入进来。当然你可以有自己的做法。
图
1
第三步
:为你的
java
程序添加本地库文件。如果你使用
windows
的话,你可能注意到在
eclipse
的
plugins
目录下还有一个
org.eclipse.swt.win32_3.x.x.jar
,将这个
jar
解压以后在
os/win32/x86
目录下有几个
dll
文件。这几个
dll
为
swt
通过
JNI
访问
windows
本地
API
提供了接口,我们需要将使
java
程序在启动时候即能够访问它。你可以有多种办法实现这个目的:
最简单的办法就是直接把这几个文件拷贝到你
jre
的
bin
目录下
你也可以设定环境变量时候,在
PATH
中加入这几个
dll
文件的目录。
你还可以在运行程序时候指定
java.library.path
为这几个
dll
所在的目录,在
eclipse
中,如果你打开
Help
菜单中
About eclipse Platform
,然后在出现的对话框中选择
configuration details
按钮,你可以在接下来出现的对话框中找到
java.library.path
配置
java.library.path
你还有另外一种办法,就是在最后运行程序的时候,从
Run
菜单中选择
Run As..
而不是
Run As Java Application
,填写好必要的其他参数以后打开
Argument
选项卡,然后在
VM Argument
输入框中填写该参数为
dll
文件的路径,如图
2
所示
图
2
通过这三步工作,你就可以编写
swt/JFace
程序了。
Hello,World!
下面的内容就是我们
Hello,world!
的示例。首先建立一个类,我将这个类取名为
HelloSwt
,在我的工程中,它位于
swtjfacesample
包的下面。类的内容如下:
1
package swtjfacesample;
2
3
import org.eclipse.swt.SWT;
4
import org.eclipse.swt.widgets.Display;
5
import org.eclipse.swt.widgets.Shell;
6
import org.eclipse.swt.widgets.Text;
7
8
public
class
HelloSwt
{
9
/**/
/*
*
10
* Hello,world!
11
*
12
* @param args
13
*/
14
public
static
void
main(String[] args)
{
15
Display display
=
new
Display();
16
Shell shell
=
new
Shell(display);
17
18
Text helloText
=
new
Text(shell, SWT.CENTER);
19
helloText.setText(
"
Hello,World!
"
);
20
helloText.pack();
21
22
shell.pack();
23
shell.open();
24
25
while
(
!
shell.isDisposed())
{
26
if
(
!
display.readAndDispatch())
{
27
display.sleep();
28
}
29
}
30
display.dispose();
31
32
}
33
}
34
代码段
1
关于这段代码的内容,我们会在下面的内容中进行详细介绍。现在我们可以尝试着运行一下,确定已经编译完成后从
eclipse
的
Package Explorer
中选中这个类然后点右键,在弹出的菜单中你会看到
Run As
,进一步选中这一项,然后在二级菜单中选“
Run As Java Application
”,如果运行正常的话你会看到如图
3
的运行结果:
图
3
Q&A:
出现了问题怎么办
Q:
我的程序编译时候出现了错误!
A:
如果是提示诸如
Text,Display
这些类不能够被成功引入,那么你需要检查一下是否我们前面提到的
jar
都已经被成功引入到你的
classpath
Q:
编译成功了但是不能运行,出现了异常
A:
检查一下异常信息,如果你的异常信息类似这样:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-win32-3128 in java.library.path
...
的话,那说明我们在前面第三步提到的那些
dll
没有正常工作,最好能够按照前面的说明重新配置一下。