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框架只能提供两者的交集。
Swing:Swing是为了解决LCD问题而产生的,通过使用模拟的组件来代替本地组件,解决了LCD问题,同时提供了更加丰富的轻量级组件。但是它有一个问题就是Swing应用程序看起来并不像本地应用程序,虽然后来的JVM提供了改善,但是swing应用程序仍然受到性能的困扰,同时swing消耗太多的内存,这使得其无法移植到类似于PDA或者移动电话平台。
正因为以上两个原因,IBM决定开发一个新的GUI lib,以满足他们的需求,SWT的出现解决了AWT和Swing框架的缺点。 SWT通过JNI(Java Native Interface)来访问本地组件,如果操作系统平台上没有可用的组件,那么SWT模拟不可用的组件。
SWT编程组件:
SWT应用程序的基本构成模块是Display、Shell和Widgets。Display负责管理事件循环以及控制UI线程和其他线程之间的通信;Shell是应用程序中由操作系统窗口管理程序管理的窗口;每个SWT应用程序都至少包含一个Display和Shell实例。
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 bits。style bits在SW类中被定义为常量,例如,Button button = new Button(shell, <styleBits>)。可以通过OR操作符( | )使用多个style bit。例如,而乐使用一个推样式的带边框的按钮,可以使用SWT.PUSH | SWT.BORDER作为style bit参数。
设置环境:
设置方法一:
开发SWT应用和开发Swing应用不同,开发SWT应用时需要添加SWT应用程序库(swing使用的api是jdk自带的)。
首先需要的lib是swt.jar文件,位于:
$eclipse.home/plugins/org.eclipse.swt.win32.win32.x86_3.4.1.v3452b.jar文件。
注:该路径为eclipse3.4中swt库文件所处位置,对于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部分下载SWT的zip文件。(http://www.eclipse.org/swt/)
将下载的zip文件导入到eclipse的workspace中,可以通过:
File->Import->General->Existing Projects into Workspace->Select archive file选择下载的zip文件后,可以看到Projects区域包含了project:org.eclipse.swt(/)。
(默认的将zip文件中的内容拷贝到workspace中)
最后,在开发的project中通过设置project依赖,可以在其他的project中使用SWT。
(选择要使用SWT的project,Project->Propertes->Java Build Path->Projects->org.eclipse.swt)
此时就可以在该项目(依赖SWT的项目)中使用SWT中的API了。
SWT组成包功能简介:
org.eclipse.swt : SWT常量和错误处理,即SWTException和SWTError。
org.eclipse.swt.accessibility : SWT可访问性。
org.eclipse.swt.awt : SWT AWT嵌入式支持。
org.eclipse.swt.browser : SWT浏览器组件。
-->
- 该日志由 lqq25 于11年前发表在综合分类下,最后更新于 2013年03月28日.
- 转载请注明: SWT 基础 | 学步园 +复制链接