admin管理员组文章数量:1538417
2024年6月26日发(作者:)
使用Eclipse进行SWT编程
"The best way to predict the future is to invent it."—Alan Kay
1. 为什么要使用SWT?
SWT是IBM开发一套跨平台的GUI开发框架。为什么IBM要创建另一种GUI呢?为什么他
们不使用现有的Java GUI框架呢?要回答这些问题,我需要回到Java的早期时代。
Sun已经创建了一套跨平台的GUI框架 AWT (Abstract Windowing Toolkit)。 这个AWT
框架使用了本地窗口组件(native widgets)不过它存在LCD问题. 这个LCD问题导致了它
失去主要的平台特性。换句话说,如果平台A有窗口组件1-40而平台B有窗口组件20-25,
那么这个跨平台的AWT框架只能提供这两个集合的交集。
为了解决这个问题,Sun创建了一个新的框架使用模拟窗口组件(emulated widgets)来代
替本地窗口组件(native widgets)。这个方法解决了LCD问题同时提供了丰富的窗口组件,
不过也产生了其他的问题。例如,Swing应用程序不再和本地程序在样子上一致。虽然JVM有
了很大的改善, 但是Swing应用程序仍然存在它们本地配对物所没有的性能问题。而且,Swing
应用程序消耗了太多的内存,故不适合用于PDA和移动电话等小型设备。
IBM发现这些方法都无法满足他们的需求。因此,IBM创建了新的GUI库叫做SWT,它解决
了AWT和Swing框架中的问题。SWT框架使用JNI访问本地窗口组件(native widgets),
如果一个窗口组件在主机平台上不能获得,那么SWT会模拟这个不能获取的窗口组件。
2. 一个SWT应用程序的基础材料
Display, Shell和Widgets是一个SWT应用程序的基础材料。Displays用于管理事件循环
(event loops)和控制UI线程和其他线程之间的通讯。Shell是应用程序中由操作系统窗体
管理器来管理的窗体。任何SWT应用程序都需要至少一个Display实例和1个或更多的Shell
实例。
图
1.
不同视角看的
SWT
程序
图
1 说明了一个SWT应用程序的不同看法。第一幅图是简化的UI对象的继承图。第二幅图是
UI对象的包含结构。第三幅图就是创建了的UI。
如果一个应用程序使用多个线程,每个线程使用自己的Display对象实例。那么你可以通过使
用静态的ent()方法得到当前活跃的Display对象实例。
一个Shell表示一个特别操作系统中的一个窗口。一个Shell可以最大化,正常化,和最小化。
有两种类型的shell。一种是顶层(top-level)Shell作为Display的主窗口创建的,另一种是
依赖于其他shell的对话shell。
Shell的类型是由传给Shell构造函数的style位决定的。Shell的默认值是对话Shell。也就是
说,如果没有传递任何值给构造函数参数,那么创建的是默认的对话Shell。如果一个Display
对象作为参数,那么它是顶层(top-level)Shell。
有些窗口组件(widget)的属性必须在创建时设定。这些窗口组件(widget)属性叫做style bits。
Style bits是在SWT类中定义的常量。如Button button = new Button( shell,
你需要使用 | 作为style bit参数。
3. 环境设置
开发一个SWT应用程序与开发一个Swing应用程序不同。为了可以开始一个SWT应用程序
的开发,你需要把SWT库加到classpath中,同时设置好对应的必要的环境变量。
第一个需要的库是文件,它位于
ECLIPSE_32_2.1.0wswin32目录。根据你
使用的Eclipse版本,你可能需要使用不同的目录。这个文件必须加到你的classpath
中,为此到Project->Properies->JavaBuildPath->Libraries->Add Variable ->
Eclipse Home ->Extend并按上述路径选择库,然后单击OK。
然后,你可以编译SWT应用程序,但是由于抛出下边所示的运行时异常,无法运行它,因为
使用了本地库。你需要设置环境变量来在Java中使用本地库。
Console output
sfiedLinkError: no swt-win32-2133 in
at brary(:1403)
at brary0(:788)
at brary(:832)
...
at y.
at (:25)
Exception in thread "main"
版权声明:本文标题:教你使用Eclipse进行SWT编程(普通下载) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1719396754a776135.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论