Java桌面应用程序设计新贵:SWT简介

Java语言的声望和它在桌面应用程序(GUI程序)所取得的成就显然极不相符,至今仍然很少能看到非常成功Java桌面程序。虽然有JBuilder,Netbean,JProbe等大型软件作为代表,但这仍不能证明Java的GUI程序是成功的:它们的外观总是和同一操作系统平台下的其它软件显得格格不入。对机器配置的需求也似乎永无止境,这使得它们只能被一些总是拥有当前最高性能PC的程序员们所容忍,或是那些不在乎金钱和时间的专业用户所接受。对绝大多数计算机使用者来说,AWT或SWING代表着怪异的界面和无法接受的速度。Standard Widget Toolkit(SWT)或许是Java这一噩梦的终结者,广大Java程序员终于可以开发出高效率的GUI程序,它们拥有标准的外观,几乎没有人能看出你的程序是用Java写出来的,更为重要的是,这些程序是跨平台的。

SWT本身仅仅是Eclipse组织为了开发Eclipse IDE环境所编写的一组底层图形界面 API。或许是无心插柳,或是有意为之,至今为止,SWT无论是在性能和外观上,都超越了SUN公司提供的AWT和SWING。目前Eclipse IDE已经开发到了2.1版本,SWT已经十分稳定。这里指的稳定应该包含两层意思:

一是指性能上的稳定,其中的关键是源于SWT的设计理念。SWT最大化了操作系统的图形构件API,就是说只要操作系统提供了相应图形的构件,那么SWT只是简单应用JNI技术调用它们,只有那些操作系统中不提供的构件,SWT才自己去做一个模拟的实现。可以看出SWT的性能上的稳定大多时候取决于相应操作系统图形构件的稳定性。

另一个稳定是指SWT API包中的类、方法的名称和结构已经少有改变,程序员不用担心由于Eclipse组织开发进度很快(Eclipse IDE每天都会有一个Nightly版本的发布),而导致自己的程序代码变化过大。从一个版本的SWT更新至另一版本,通常只需要简单将SWT包换掉就可以了。

第一个SWT程序

下面让我们开始一个SWT程序。(注意:以下的例子和说明主要针对Windows平台,其它的操作系统应该大同小异)。首先要在Eclipse安装文件中找到SWT包,Eclipse组织并不提供单独的SWT包下载,必须下载完整的Eclipse开发环境才能得到SWT包。SWT是作为Eclipse开发环境的一个插件形式存在,可以在${你的eclipse安装路径}\plugins路径下的众多子目录下去搜索SWT.JAR文件,在找到的JAR文件中包含了SWT全部的Java类文件。因为SWT应用了JNI技术,因此同时也要找到相对应的JNI本地化库文件,由于版本和操作平台的不同,本地化库文件的名称会有些差别,比如SWT-WIN32-2116.DLL是Window平台下Eclipse Build 2116的动态库,而在Unix平台相应版本的库文件的扩展名应该是.so,等等。注意的是,Eclipse是一个开放源代码的项目,因此你也可以在这些目录中找到SWT的源代码,相信这会对开发很有帮助。下面是一段打开空窗口的代码(只有main方法)。

import com.e2one.example;
public class OpenShell{
 public static void main(String [] args) {
  Display display = new Display();
  Shell shell = new Shell(display);
  shell.open();
  // 开始事件处理循环,直到用户关闭窗口
  while (!shell.isDisposed()) {
   if (!display.readAndDispatch())
    display.sleep();
  }
  display.dispose();
 }
}

确信在CLASSPATH中包括了SWT.JAR文件,先用Javac编译例子程序。编译无错后可运行java -Djava.library.path=${你的SWT本地库文件所在路径} com.e2one.example.OpenShell,比如SWT-WIN32-2116.DLL件所在的路径是C:\swtlib,运行的命令应该是java -Djava.library.path=c:\swtlib com.e2one.example.OpenShell。成功运行后,系统会打开了一个空的窗口。

剖析SWT API

下面再让我们进一步分析SWT API的组成。所有的SWT类都用org.eclipse.swt做为包的前缀,下面为了简化说明,我们用*号代表前缀org.eclipse.swt,比如*.widgets包,代表的是org.eclipse.swt.widgets包。

我们最常用的图形构件基本都被包括在*.widgets包中,比如Button,Combo,Text,Label,Sash,Table等等。其中两个最重要的构件当数Shell和Composite。Shell相当于应用程序的主窗口框架,上面的例子代码中就是应用Shell构件打开一个空窗口。Composite相当于SWING中的Panel对象,充当着构件容器的角色,当我们想在一个窗口中加入一些构件时,最好到使用Composite作为其它构件的容器,然后再去*.layout包找出一种合适的布局方式。SWT对构件的布局也采用了SWING或AWT中Layout和Layout Data结合的方式,在*.layout包中可以找到四种Layout和与它们相对应的布局结构对象(Layout Data)。在*.custom包中,包含了对一些基本图形构件的扩展,比如其中的CLabel,就是对标准Label构件的扩展,上面可以同时加入文字和图片,也可以加边框。StyledText是Text构件的扩展,它提供了丰富的文本功能,比如对某段文字的背景色、前景色或字体的设置。在*.custom包中也可找到一个新的StackLayout布局方式。

SWT对用户操作的响应,比如鼠标或键盘事件,也是采用了AWT和SWING中的Observer模式,在*.event包中可以找到事件监听的Listener接口和相应的事件对象,例如常用的鼠标事件监听接口MouseListener,MouseMoveListener和MouseTrackListener,及对应的事件对象MouseEvent。

*.graphics包中可以找到针对图片、光标、字体或绘图的API。比如可通过Image类调用系统中不同类型的图片文件。通过GC类实现对图片、构件或显示器的绘图功能。

对不同平台,Eclipse还开发了一些富有针对性的API。例如,在Windows平台,可以通过*.ole.win32包很容易的调用ole控件,这使Java程序内嵌IE浏览器或Word、Excel等程序成为可能!

时间: 2024-08-31 12:44:22

Java桌面应用程序设计新贵:SWT简介的相关文章

Java桌面应用程序开发简介

Java对于服务器,个人电脑和移动设备来说是一项伟大的技术.由于需要java的跨平台的特性,因此java在服务器和移动设备方面的应用是非常成功的.但java在个人电脑应用方面的情况和在服务器及移动设备方面的应用有所不同,但是这很快就会有所改变,至少比你想象得要快.在这篇文章中,我会分析一下java在桌面环境中的应用将怎样得到提升,然后具体说一下java GUI(用户图形接口)的三个主要的工具:AWT, Swing, 和SWT..在下文中,我将会开发一个完整的java桌面应用程序. Java与桌面

搭建Java桌面应用程序原型(一)

在这篇文章里,我将描述一个Java桌面应用的原型,我把它叫做JImageing.我打算把焦点集中在应用的框架上,解释我怎么做技术上的决定和我怎么解决在开发过程中出现的问题. 为什么要建造一个原型? 很多应用程序的开发都是由于几个原因从一个原型开始的.这些原因中的第一条就是,你必须确定用现有的技术能够满足用户的需求.例如,在不用本地代码的Swing应用程序中Windows集成不能够被实现,这就导致丧失了一些Java跨平台的优势.SWT提供了一个和操作系统有限制的集成,这就允许你在很多本地平台上运行

一键搞定Java桌面应用安装部署

对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是否安装 有jre.jre版本问题.jre去哪下载.如何用jre启动你的Java应用?不要说刚接 触电脑的人,就算是比较熟悉电脑,如果没有接触过Java,面对一个Java应用, 如何在Windows下启动它,估计都会折腾半天.如果不是因为这个问题,Java在 我的眼里算是最完美的语言了,也是我最喜爱的语言. 所以我认为这个是导致Java桌面应用被一些人所讨厌的最大原因,Java的优 势是"一次编写,随处运行",跨平台特性确实

结合BeautyEye开源UI框架实现的较美观的Java桌面程序

BeautyJavaSwingRobot 结合BeautyEye开源UI框架实现的较美观的Java桌面程序,主要功能就是图灵机器人和一个2345网站万年历的抓取.... 挺简单而且实用的一个项目,实现出来的效果也还不错.希望可以学到知识的小可爱不对应该是帅哥,可以给我star...共勉 , github(gayhub更准确?)项目地址 https://github.com/Snailclimb/BeautyJavaSwingRobot 1,效果图: 主要界面图 机器人效果图 身份证查询效果图 2

开发Java桌面应用时,DB访问和事务处理,大家都用什么技术(框架)?

问题描述 开发Java桌面应用时,DB访问和事务处理,大家都用什么技术(框架)? 问题补充:andilyliao 写道 解决方案 其实推荐使用eclipse rcp 这个界面比较好看 至于处理数据库的部分可以使用框架也可以直接用jdbc 我觉得无所谓 ,不过建议使用hibernate 因为如果数据库有变化 这个东西很省事 呵呵解决方案二:hibernate+spring比较常见 呵呵

Java简易计算器程序设计_java

编写一个模拟计算器的应用程序,使用面板和网格布局, 添加一个文本框,10个数字按钮(0~9),4个加减乘除按钮, 一个等号按钮,一个清除按钮,一个求平方根按钮,一个退格按钮, 要求将计算公式和结果显示在文本框中,实现效果如下图所示. Java简易计算器代码: import javax.swing.*; import javax.swing.JTextField; import java.awt.*; import java.awt.event.*; import java.lang.*; imp

SWT Java桌面应用通过VMControl配置和部署虚拟设备

本文中开发的应用程序称为 VADeployer,它实现了对 IBM Systems Director VMControl REST API 的超文本安全传输协议 (HTTPS) 请求,以模仿虚拟设备通过 IBM Systems Director Web 界面部署流程.VADeployer 还可用于修改其他设置,比如部署前的内存和处理器分配. VADeployer 构建于 Java 1.6 之上,图形用户界面 (GUI) 是使用 Eclipse Juno 和 WindowBuilder Pro S

Java中使用Draw2D和SWT绘图

用 Java绘图一直都吸引着开发人员的注意.传统上,Java 开发人员使用 java.awt.Graphics 或 Java 2D API 进行绘图.一些开发人员甚至使用现成的开源工具箱(如 JSci)来绘图.但很多时候,您的选择被限定在了 AWT 或 Swing 上.为了最大限度地减少对第三方工具箱的依赖,或者为了简化绘图基础,可以考虑使用 Draw2D,并编写自己的代码来制图或绘图. Draw2D 简介 Draw2D 是一个驻留在 SWT Composite 之上的轻量级窗口小部件系统.一个

Java编程那些事儿84——IO简介

第十一章 I/O处理 I/O(Input/Output)是输入和输出的简称,在Java语言中所有和输入输出有关的都属于IO处理技术,例如包含文件的读写和网络数据的发送等. 其实整个计算机实现功能时最主要的就是IO,用户使用鼠标.键盘等输入设备向程序输入数据,程序进行一定的逻辑处理,然后再将处理结果以一定的形式显示到显示器等输出设备上. I/O处理技术是Java语言中实现文件操作.内存操作.控制台输入以及网络编程的基础,但是由于I/O技术本身的设计原因,也使得I/O处理技术的难度比较大,需要花费比