[转载] 在Eclipse中使用SWT进行界面设计

原创 2004年10月10日 23:29:00
1. 为什么要使用SWT?
     SWT是一个IBM开发的跨平台GUI开发工具包。至于为什么IBM要费劲自己另起炉灶开发一个GUI工具包,而不是使用Sun现有的由AWT, Swing, Java 2D, Java 3D等构成的Java GUI框架,那就说来话长了。(记得在一个BBS上读过一个关于SWT起源的调侃类的帖子)。

     在SWT之前,Sun已经提供了一个跨平台GUI开发工具包AWT (Abstract Windowing Toolkit). 虽然AWT框架也使用的是原生窗口部件(native widgets),但是它一直未能突破LCD问题。LCD问题导致了一些主要平台特征的遗失。如果你不明白的话(其实我也没明白),换句话说,如果平台A有窗口部件(widgets)1–40,而平台B有窗口部件(widgets)20–25,那么跨平台的AWT框架只能提供这两个窗口部件集的交集。

     为解决这个问题,Sun又创建了一个新的框架。这个框架不再使用原生窗口部件,而是使用仿真窗口部件(emulated widgets)。这个方法虽然解决了LCD问题,并且提供了丰富的窗口部件集,但是它也带来了新的问题。例如,Swing应用程序的界面外观不再和原生应用程序的外观相似。 虽然在JVM中这些Swing应用程序已经得到了最大程度的性能改善,但是它们还是存在着其原生对应物所不具有的性能问题。并且,Swing应用程序消耗太多的内存,这样Swing不适于一些小设备,如PDA和移动电话等。

    IBM进行了尝试以彻底解决AWT和Swing框架带来的上述问题。最终,IBM创建了一个新的GUI库,这就是SWT。SWT框架通过JNI来访问原生窗口部件。如果在宿主(host)平台上无法找到一个窗口部件,SWT就会自动地模拟它。

2. SWT应用程序的组成
     一个SWT应用程序的基本组成部分为显示界面(Display)、命令界面(Shell,使命令进入并使运行初始化)和窗口部件(Widgets)。Display负责管理事件循环和控制UI线程和其他线程之间的通讯。Shell是应用程序中被操作系统窗口管理器管理的窗口。每个SWT应用程序至少需要一个Display和大于等于1个的Shell实例。
Click to view in original size 477 x 192

图1:从不同的角度看SWT应用程序

      
     图1从不同的角度展示了SWT应用程序。左侧的图是一个简化的UI对象的继承图。中间的图展示了UI对象的容器结构(containment structure)。右侧的图则是创建后的UI外观。

     如果一个应用程序使用了多个线程,那么每个线程都使用的是Display对象分配给它自己的实例。程序员可以使用静态方法Display.getCurent()来得到Display对象的当前活动的实例。
     
     Shell用于在特定的操作系统中表现窗口。Shell可以最大化、最小化或正常化。Shell有两种类型。第1种是高层shell,它是Display的子窗口,同时它也是一个主窗口。第2类是对话shell,这种shell要依赖于其他的shell窗口存在。shell窗口最终成为上述那种类型,要看在创建shell时传递给shell构造函数的是什么风格位(style bits)。一个shell的默认值是DialogShell。也就是说,如果不带参数,那默认就是一个对话shell。而如果给参数赋予了一个Display对象,则该shell将是一个高层shell。

     一些窗口部件的属性必须在创建它们的初期就要被设置。这些窗口部件的属性就是前面所说的风格位(style bits)。在SWT的类中,风格位被定义为常数。例如,Button button = new Button( shell, <styleBits> )。可以使用或(OR)操作符“|”来设置多个风格位。例如,如果想设置一个带边界的压下按钮,需要传递SWT.PUSH | SWT.BORDER作为风格位参数。
3. 进行SWT开发前的环境设置
     为了进行SWT应用开发,你需要把SWT库添加到类路径(classpath)上,并设置必要的环境变量。

     首先,你要在ECLIPSE_HOME/eclipse/plugins/org.eclipse.swt.win32_2.1.0/ws/win32目录下找到swt.jar库文件。注意这里的“org.eclipse.swt.win32_2.1.0”目录是和Eclipse的版本有关的。实在找不到你就用文件搜索功能吧。然后依次打开下面窗口Project->Properies->JavaBuildPath->Libraries->Add Variable -> Eclipse Home ->Extend将swt.jar文件加到类路径中。

    接着,你肯定想编译这个SWT应用了。但是会出现下面所示的运行异常。出现这个异常的原因是swt.jar库使用的是原生库。你需要设置java.library.path环境变量来使用Java中的原生库。

控制台(Console )的输出如下:
java.lang.UnsatisfiedLinkError: no swt-win32-2136 in java.library.path
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:108)
at org.eclipse.swt.internal.win32.OS.<clinit>(OS.java:46)
at org.eclipse.swt.widgets.Display.internal_new_GC(Display.java:1291)
at org.eclipse.swt.graphics.Device.init(Device.java:547)
at org.eclipse.swt.widgets.Display.init(Display.java:1316)
at org.eclipse.swt.graphics.Device.<init>(Device.java:96)
at org.eclipse.swt.widgets.Display.<init>(Display.java:291)
at org.eclipse.swt.widgets.Display.<init>(Display.java:287)
at com.swtdesigner.trytry.main(trytry.java:24)
Exception in thread "main"


     按下面的步骤设置java.library.path变量:依次打开Run-> Run...-> Java Applicaton-> "Project" ->Arguments -> VM Arguments。在“VM Arguments”中输入
-Djava.library.path=c:/eclipse/plugins/org.eclipse.swt.win32_2.1.0/os/win32/x86
注意要输入你自己的swt.jar所在的路径。

小技巧:加载原生库:
如果你需要加载自己应用程序所使用的原生库,可以使用Runtime.getPlatform.loadLibrary("libraryname")方法。


     再编译一次你的应用程序,这次通过了吧。

[转载] 在Eclipse中使用SWT进行界面设计

1. 为什么要使用SWT?      SWT是一个IBM开发的跨平台GUI开发工具包。至于为什么IBM要费劲自己另起炉灶开发一个GUI工具包,而不是使用Sun现有的由AWT, Swing, Java ...
  • yipsilon
  • yipsilon
  • 2004年10月10日 23:29
  • 1627

Eclipse平台利用SWT Designer6.0进行图形界面开发入门--搭建开发环境篇

 Eclipse平台利用SWT Designer6.0进行图形界面开发入门--搭建开发环境篇1.下载相关软件   Eclipse3.2  下载  http://www.eclipse.org/down...
  • gqm1982
  • gqm1982
  • 2007年03月19日 15:15
  • 2545

在Eclipse中使用SWT进行界面设计

作者:yipsilon 1. 为什么要使用SWT?   SWT是一个IBM开发的跨平台GUI开发工具包。至于为什么IBM要费劲自己另起炉灶开发一个GUI工具包,而不是使用Sun现有的由AWT, Swi...
  • Javaor2004
  • Javaor2004
  • 2004年11月14日 22:11
  • 462

在Eclipse中使用SWT进行界面设计

1. 为什么要使用SWT?      SWT是一个IBM开发的跨平台GUI开发工具包。至于为什么IBM要费劲自己另起炉灶开发一个GUI工具包,而不是使用Sun现有的由AWT, Swing, Java ...
  • jery_lee
  • jery_lee
  • 2004年10月11日 22:23
  • 1256

HsqlDB+Eclipse3+SWT开发图形界面(转载)

HsqlDB的安装与使用1:到http://hsqldb.sourceforge.net/下载Hsqldb安装包并将HSQLDB解压到你的特定安装位置(如:D:/Hsqldb)。2:建立一个文件夹(如...
  • JustForYouAndMe
  • JustForYouAndMe
  • 2005年10月20日 12:51
  • 960

在Eclipse中用SWT设计界面

在Eclipse中用SWT设计界面1. 为什么要使用SWT? SWT是一个IBM开发的跨平台GUI开发工具包。至于为什么IBM要费劲自己另起炉灶开发一个GUI工具包,而不是使用Sun现有的由AWT, ...
  • javabloger
  • javabloger
  • 2006年03月13日 17:24
  • 1088

用Eclipse进行可视化Java界面设计

http://dev.csdn.net/develop/article/24/24815.shtm
  • zxub
  • zxub
  • 2004年09月22日 14:57
  • 986

eclipse下搭建SWT图形界面开发环境

什么是SWT 参考:http://www.cppblog.com/baby-fly/archive/2009/10/20/99008.html         用java的人一定都知道AW...
  • wusuopuBUPT
  • wusuopuBUPT
  • 2012年05月06日 16:27
  • 25674

在Eclipse中使用SWT进行界面设计

在Eclipse中使用SWT进行界面设计 SWT是一个IBM开发的跨平台GUI开发工具包。至于为什么IBM要费劲自己另起炉灶开发一个GUI工具包,而不是使用Sun现有的由AWT, Swing, ...
  • mxfhhh
  • mxfhhh
  • 2005年04月19日 17:18
  • 741

使用Eclipse进行SWT编程

使用Eclipse进行SWT编程1. 为什么要使用SWT?SWT是IBM开发一套跨平台的GUI开发框架。为什么IBM要创建另一种GUI呢?为什么他们不使用现有的Java GUI框架呢?要回答这些问题,...
  • iiisan
  • iiisan
  • 2005年01月06日 16:46
  • 7576
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:[转载] 在Eclipse中使用SWT进行界面设计
举报原因:
原因补充:

(最多只允许输入30个字)