现在的位置: 首页 > 综合 > 正文

SWT 基础

2013年03月28日 ⁄ 综合 ⁄ 共 3160字 ⁄ 字号 评论关闭

SWT 基础(Standard Widget Toolkit)

 

SWT简介:

SWT(Standard Widget Toolkit)是开源的窗口组件工具包,Java可以通过使用SWT来设计可以提供高效,可移植访问的操作系统UI设施。

Sun提供了AWT以及后来的Swing,但是这两者都有着其缺点:

AWT(Abstract Windowing Toolkit)AWT使用本地组件但是存在LCD问题,LCD问题丢失了一些平台特性,也就是说,如果平台A有组件1-40,而平台B有组件20-25,那么跨平台的AWT框架只能提供两者的交集。

SwingSwing是为了解决LCD问题而产生的,通过使用模拟的组件来代替本地组件,解决了LCD问题,同时提供了更加丰富的轻量级组件。但是它有一个问题就是Swing应用程序看起来并不像本地应用程序,虽然后来的JVM提供了改善,但是swing应用程序仍然受到性能的困扰,同时swing消耗太多的内存,这使得其无法移植到类似于PDA或者移动电话平台。

正因为以上两个原因,IBM决定开发一个新的GUI lib,以满足他们的需求,SWT的出现解决了AWTSwing框架的缺点。 SWT通过JNI(Java Native Interface)来访问本地组件,如果操作系统平台上没有可用的组件,那么SWT模拟不可用的组件。

 

SWT编程组件:

SWT应用程序的基本构成模块是DisplayShellWidgetsDisplay负责管理事件循环以及控制UI线程和其他线程之间的通信;Shell是应用程序中由操作系统窗口管理程序管理的窗口;每个SWT应用程序都至少包含一个DisplayShell实例。
http://p.blog.csdn.net/images/p_blog_csdn_net/sunjavaduke/EntryImages/20090407/003.png

 

上图从不同的角度描述了SWT应用程序。第一部分是简化的继承层次图,第二部分是UI对象的包含关系图,第三部分是生成的UI

如果应用程序包含多个线程,每个线程使用自己的Display对象的实例。可以通过Display.getCurrent()方法来获取当前的Display对象的活跃实例。

Shell代表了特定操作系统中的窗口,Shell可以被最大化,正常化以及最小化。一共有两种类型的Shell,一种是顶层Shell,作为Display的主窗口,第二种是基于其他Shell(对话框或者顶层Shell)的对话框Shell

Shell的类型取决于传递给Shell构造器的参数的类型。默认的值是DialogShell,也就是说,如果使用默认的构造器,那么创建的Shell是对话框Shell。如果传递一个Display对象给构造器,那么创建的是顶层Shell

一些组件的属性必须在创建的时候就被设置。这些组件的属性成为style bitsstyle bitsSW类中被定义为常量,例如,Button button = new Button(shell, <styleBits>)。可以通过OR操作符( | )使用多个style bit。例如,而乐使用一个推样式的带边框的按钮,可以使用SWT.PUSH | SWT.BORDER作为style bit参数。

 

设置环境:

设置方法一:

开发SWT应用和开发Swing应用不同,开发SWT应用时需要添加SWT应用程序库(swing使用的apijdk自带的)

首先需要的libswt.jar文件,位于:

$eclipse.home/plugins/org.eclipse.swt.win32.win32.x86_3.4.1.v3452b.jar文件。

注:该路径为eclipse3.4swt库文件所处位置,对于eclipse之前的版本,可能位于:

$eclipse.home/plugins/org.eclipse.swt.win32_2.1.0/ws/win32目录下的swt.jar

SWT对应的jar需要添加到SWT应用程序的classpath中。可以通过选择对应的project,然后通过:

Project->Properies->JavaBuildPath->Libraries->Add Variable -> Eclipse Home ->Extend

选择对应的jar文件。

之后就可以正常的编译SWT应用程序了,但是在运行时,还会产生如下的运行时异常:

java.lang.UnsatisfiedLinkError: no swt-win32-2133 in java.library.path

at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1403)

at java.lang.Runtime.loadLibrary0(Runtime.java:788)

at java.lang.System.loadLibrary(System.java:832)

...

at org.eclipse.swt.widgets.Display.<init>(Display.java:287)

at Main.main(Main.java:25)

Exception in thread "main"

由于swt.jar会使用本地库,所以需要设置java.lib.path环境变量,使其可以在Java中使用本地库。

Run-> Run...-> Java Applicaton-> New ->Arguments -> VM Arguments

然后将下面的路径添加到VM Arguments部分:

-Djava.library.path=c:/eclipse/plugins/org.eclipse.swt.win32_2.1.0/os/win32/x86

(根据eclipse版本以及安装位置的不同,需要修改上述参数的设置)

可以通过Runtime.getPlatform.loadLibrary(“libraryName”)来加载本地库。

设置完上述环境之后,就可以在eclipse环境下开发SWT应用了。

 

设置方法二:

虽然SWT作为Eclipse plugin API的一部分被集成,但是如果要开发独立的应用程序,那么最好还是下载SWT独立软件包。本部分将介绍使用独立的SWT设置开发环境。

首先在SWT主页中的Releases部分下载SWTzip文件。(http://www.eclipse.org/swt/)

将下载的zip文件导入到eclipseworkspace中,可以通过:

File->Import->General->Existing Projects into Workspace->Select archive file选择下载的zip文件后,可以看到Projects区域包含了project:org.eclipse.swt(/)

(默认的将zip文件中的内容拷贝到workspace)

最后,在开发的project中通过设置project依赖,可以在其他的project中使用SWT

(选择要使用SWTprojectProject->Propertes->Java Build Path->Projects->org.eclipse.swt)

此时就可以在该项目(依赖SWT的项目)中使用SWT中的API了。

 

SWT组成包功能简介:

org.eclipse.swt :  SWT常量和错误处理,即SWTExceptionSWTError

org.eclipse.swt.accessibility :  SWT可访问性。

org.eclipse.swt.awt :  SWT AWT嵌入式支持。

org.eclipse.swt.browser :  SWT浏览器组件。

-->

作者:

抱歉!评论已关闭.