内容发布更新时间 : 2024/12/23 1:53:25星期一 下面是文章的全部内容请认真阅读。
第4章 SWT图形用户界面
本章要点
1. SWT程序开发步骤。 2. SWT常用组件的使用。 3. SWT的布局。 4. SWT的事件处理。 5. SWT Designer简介。 本章难点
1. SWT常用组件的使用。 2. SWT的布局。 3. SWT的事件处理。
4.1SWT/JFace简介
SWT(Standard Widget Toolkit)即标准小窗口工具箱,是IBM公司推出的一种在Eclipse中使用的集成开发环境,SWT提供可移植的API,并与底层本机OS GUI平台紧密集成,它是一个与本地窗口系统集成在一起的小部件集和图形库。SWT由JNI(Java Native Interface,Java本机接口)调用操作系统的内部API,因此运行速度快,能够获得与操作系统的内部应用程序相同的外观。
JFace是一个用户界面工具箱,也是一个易用、功能强大的图形包,它简化了常见的图形用户界面的编程任务。SWT和JFace都是Eclipse平台上的主要组件。JFace是在SWT的基础上创建的,但JFace并不能完全覆盖SWT的功能,JFace和SWT的关系如图4.1所示。由于JFace的功能更强大,因此做图形界面开发时一般优先选用JFace。
图4.1 JFace和SWT的关系
4.1.1 SWT程序开发步骤
在eclipse的plugins目录下,找到文件org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar,文件名中中3.2.1是eclipse的版本号,v3235是SWT的序列号,不同的eclipse版本这两个数字也不同。在DOS状态下,用jar命令将该文件解压,命令格式如下:
jar xf org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar
该命令将指定的文件org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar解压到当前目录下。解压后得到四个DLL文件:swt-win32-3235.dll,swt-awt-win32-3235.dll,swt-gdip-win32-3235.dll和swt-wgl-win32-3235.dll。这四个文件就是SWT的原生库文件。原生库文件为SWT通过JNI访问windows本地API提供了接口,为使Java程序在启动时能够访问这些文件,可以通过以下方法进行设置:
方法一:将这四个DLL文件复制到jre的bin目录下。
方法二:设置环境变量,在PATH中加入这几个dll文件所在的目录。 方法三:在eclipse的Java项目中导入原生库文件。操作方法是:
在eclipse的包资源管理器中,右单击项目名→导入→常规→文件系统→下一步→浏览→选择DLL文件所在目录→确定→勾选DLL文件→完成。
导入SWT的原生库文件后,还要在eclipse的Java项目中配置构建路径,添加外部JAR,将文件org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar加入到项目中,操作方法是:
在eclipse的包资源管理器中,右单击项目名→构建路径→配置构建路径→库(L)→添加外部JAR→在eclipse的plugins文件夹中找到该jar文件→打开→确定。
例4.1 在Java应用程序中使用SWT的组件。 操作步骤:
① 新建一个Java项目,项目名为:sample4_1。 ② 采用方法三在项目中导入原生库文件。
③ 配置构建路径,将org.eclipse.swt.win32.win32.x86_3.2.1.v3235.jar加入到项目中。eclipse包资源管理器可以看到导入的原生库文件和引入的jar文件,如图4.2所示。
④ 在项目中新建一个类,文件名为HelloSWT.java。 ⑤ 在类文件中写入代码。
图4.2 包资源管理器 图4.3 程序运行结果 HelloSWT.java文件内容如下:
package edu.ch4;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.graphics.*; class HelloSWT {
public static void main(String[] args) {
Display display=new Display();//创建一个display对象。 Shell shell=new Shell(display);//shell是程序的主窗体
} }
shell.setLayout(null); //设置shell的布局方式
Text hello=new Text(shell,SWT.MULTI); //声明一个可以显示多行信息的文本框 shell.setText(\应用程序\); //设置主窗体的标题 shell.setSize(200,100); //设置主窗体的大小
Color color=new Color(Display.getCurrent(),255,255,255);//声明颜色对象 shell.setBackground(color); //设置窗体的背景颜色
hello.setText(\你好,SWT世界!\);//设置文本框信息 hello.pack(); //自动调整文本框的大小 //shell.pack(); //自动调整主窗体的大小 shell.open(); //打开主窗体
while(!shell.isDisposed()){ //如果主窗体没有关闭则一直循环 }
display.dispose(); //销毁display
if(!display.readAndDispatch()){ //如果display不忙 display.sleep(); //休眠 }
在包资源管理器中,右单击文件名HelloSWT.java→运行方式→Java应用程序,程序运行
结果如图4.3所示。该窗体具有典型的Windows风格。
分析本例的源代码,可以看到,创建一个典型的SWT应用程序需要以下步骤: ①创建一个Display ②创建一个或多个Shell ③设置Shell的布局 ④创建Shell中的组件
⑤用open()方法打开Shell窗体 ⑥写一个事件转发循环 ⑦销毁display
4.1.2 SWT中的包
SWT是Eclipse图形API的基础,本节简单介绍一下SWT中常用的包。
1.org.eclipse.swt.widgets
最常用的组件基本都在此包中,如Button、Text、Label、Combo等。其中两个最重要的组件是Shell和Composite。Shell相当于应用程序的主窗体;Composite是容纳组件的容器,相当于SWING中的Panel对象。
2.org.eclipse.swt.layout
主要的界面布局方式在此包中。SWT对组件的布局也采用了AWT/SWING中的Layout和Layout Data结合的方式。
3.org.eclipse.swt.custom
对一些基本图形组件的扩展在此包中,比如其中的CLabel就是对标准Label组件的扩展,在CLabel上可以同时加入文字和图片。在此包中还有一个新的布局方式StackLayout。
4.org.eclipse.swt.event
SWT采用了和AWT/SWING一样的事件模型,在包中可以找到事件监听类和相应的事