步入SWT/JFace世界,你还等什么

2008-02-23 08:12:37来源:互联网 阅读 ()

新老客户大回馈,云服务器低至5折

  本文主要讨论Java中的GUI图形库之一:SWT/JFace。在本文的第一部分,将解释什么是SWT/JFace以及如何安装SWT/JFace。在本文的第二部分将以实例的方式讨论如何使用SWT/JFace编写GUI程序。

  一、 进入SWT/JFace世界

  1. 什么是SWT/JFace

  Java是一种强大的编程语言。但强大就意味复杂,尤其是和Java相关的名词就象天上的星星一样,数都数不过来。在本文中就涉及到两个比较常用的名词SWT和JFace。在标题中将SWT和JFace放到一起,并不是说SWT和JFace是一个意思,而是说它们的关系非常紧密。

  基于Java的图形库最主要的有三种,它们分别是Swing、AWT和SWT。其中前两个是Sun随JDK一起发布的,而SWT则是由IBM领导的开源项目(现在已经脱离IBM了)Eclipse的一个子项目。SWT的执行效率非常高。这是由于SWT的底层是由C编写的。由于SWT通过C直接调用系统层的GUI API。因此,使用SWT编写GUI程序,在外观上就和使用C 、Delphi(在Windows下)编写的程序完全一样。它的这一点和AWT类似。AWT在底层也是使用C直接调用系统层的GUI API。但它们是有区别的,最大的区别可能就是一个是Sun提供的,一个是Eclipse自带的。这就意味着如果使用AWT,只要机器上安装了JDK或JRE,发布软件时无需带其它的库。而如何使用SWT,在发布时必须要自带上SWT的*.dll(Windows版)或*.so(Linux/Unix版)文件以及相关的*.jar包。还有就是它们所提供的图形接口有一些差异。SWT可能更丰富一些,我们可以看看Eclipse的界面就知道了。但随着Sun对AWT库的不断更新,AWT的图形表现能力也在不断地提高。

  虽然SWT很强大,但它比较底层。也就是说它的一些功能在使用上还比较低级,不太符合面向对象的特征。因此,在SWT的基础上又开发了JFace。JFace在SWT上进行了一定的扩展。因此,也可说JFace是基于SWT的,就象在VC中使用MFC来包装Win32 API一样。

  2. SWT/Face的安装

  在发布使用SWT/JFace编写的GUI程序时,要随程序带上相应的库文件。对于Windows版的SWT来说,SWT包含有4个dll文件和一个jar文件。它们是swt-awt-win32-3305.dll、swt-gdip-win32-3305.dll、swt-wgl-win32-3305.dll、swt-win32-3305.dll和swt.jar。在发布时,要将4个dll文件放到path路径中,或者使用-Djava.library.path设置相应的路径。将swt.jar放到classpath路径中,或使用-classpath设置相应的jar包。而对于JFace,除了上述的5个文件外,还要带上5个jar包:

org.eclipse.core.runtime_3.1.2.jar
org.eclipse.jface_3.1.1.jar
org.eclipse.jface.text_3.1.2.jar
org.eclipse.osgi_3.1.2.jar
org.eclipse.text_3.1.1.jar
  这5个jar包都可以在eclipse的plugins目录中找到,在这5个文件后面的版本号可能会因为eclipse的版本号不同而不同,但前面的部分都是一样的。读者在找这些jar包时应注意这一点。

  SWT的开发包可以从http://www.eclipse.org单独下载,也可以从eclipse的plugins目录复制。而JFace的开发包并未提供单独的下载,因此,JFace的开发包必须要从plugins目录得到。

  二、 让我们编写第一个程序吧

  学习一种新技术的最好方法就是去使用它。下面就让我们来使用SWT和JFace来分别实现同一个程序。这个程序是一个简单的记事本程序。在上面有三个按纽,分别是"新键"、"打开","保存",下面是一个文本框,用于编辑文本信息。下面让我们先来看一下使用SWT实现的程序界面:


图1 使用SWT实现的记事本程序界面



  怎么样,看看上面的界面是不是和用Delphi、VC做的界面完全一样!!

  1. 用SWT实现

  不论一个程序带不带GUI,都必须有一个入口点,对于Java来说,这个入口点就是main函数。因此,在编写程序之前,我们必须定义一个类,并且这个类中必须有个main函数。

import org.eclipse.swt.widgets.*;
import org.eclipse.swt.*;
import org.eclipse.swt.events.*;
import java.io.*;

public class FirstSWT
{
 // 用于记录是否已经打开或保存了一个文件,如果已经打开或保存了一个文件,
 // 这个变量就是这个文件的名子
 private static String fn = "";
 public static void main(String[] args)
 {
  … …
 }
}
  上面四个import将导入一些在本程序中要用到的jar包,前三个是SWT的包,最后一个是Java的标准输入输出包。

  1、建立窗体

  任何一个GUI程序,都至少有一个窗体(在本程序中只有一个窗体)。因此,下面我们就在main函数中建立这个窗体。

display = new Display();
shell = new Shell(display, SWT.DIALOG_TRIM);
shell.setText("第一个SWT程序");
shell.setSize(400, 300);
  在上面4行代码中涉及到了两个类:Display和Shell。这两个类都是在FirstSWT中定义的私有静态类,之所以定义成全局的,是因为在以后的按钮事件类中要使用它们。下面是它们的定义:

private static Display display;
private static Shell shell;
  后面2条语句通过调用Shell类的setText和setSize方法,设置了窗口的标题和尺寸。

  下面解释一下Display和Shell类是什么。

  SWT在底层实现上分为两层:系统层和用户层。系统层就是直接和操作系统平台打交道,系统层的存在依赖于操作系统平台。在这里,系统层就是Display类。Display的功能就是在系统和用户之间架起一座桥梁,也就是说使用户访问系统资源透明化。而Shell类是直接和用户打交道,因此,它属于用户层。通过Shell类可以控制窗体中的控件、窗体本身的属性等。而Shell通过Display这座桥梁访问系统级API。

  l 向窗体中添加控件

  接下来我们先在这个窗体上建立三个按钮,代码如下:

Button newButton = new Button(shell, SWT.PUSH);
newButton.setLocation(2, 5);
newButton.setSize(50, 20);
newButton.setText("新建");

Button openButton = new Button(shell, SWT.PUSH);
openButton.setLocation(60, 5);
openButton.setSize(50, 20);
openButton.setText("打开");

Button saveButton = new Button(shell, SWT.PUSH);

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Oracle数据库的常用函数列表快速查

下一篇:JAVA基础:java中数值变量与字符串互换