本章要点
1. SWT程序开发步骤。
2. SWT常用组件的使用。
3. SWT的布局。
4. SWT的事件处理。
5. SWT Designer简介。
本章难点
1. SWT常用组件的使用。
2. SWT的布局。
3. SWT的事件处理。
JFace简介
SWT(Standard Widget Toolkit)即标准小窗口工具箱,IBM公司推出的一种在Eclipse中使用的集成开发环境,SWT提供可移植的API,并与底层本机OS GUI平台紧密集成,它是一个与本地窗口系统集成在一起的小部件集和图形库。SWT由JNI(Java Native Interface,Java本机接口)调用操作系统的内部API,因此运行速度快,能够获得与操作系统的内部应用程序相同的外观。
JFace是一个用户界面工具箱,也是一个易用、功能强大的图形包,它简化了常见的图形用户界面的编程任务。SWT和JFace都是Eclipse平台上的主要组件。JFace是在SWT的基础上创建的,但JFace并不能完全覆盖SWT的功能,JFace和SWT的关系如图所示。由于JFace的功能更强大,因此做图形界面开发时一般优先选用JFace。
                  图 JFace和SWT的关系
SWT程序开发步骤
在eclipse的plugins目录下,到文件,文件名中中是eclipse的版本号,v3235是SWT的序列号,不同的eclipse版本这两个数字也不同。在DOS状态下,用jar命令将该文件解压,命令格式如下:
jar xf 该命令将指定的文件解压到当前目录下。解压后得到四个DLL文件:,,和。这四个文件就是SWT的原生库文件。原生库文件为SWT通过JNI访问windows本地API提供了接口,为使Java程序在启动时能够访问这些文件,可以通过以下方法进行设置:
方法一:将这四个DLL文件复制到jre的bin目录下。
方法二:环境变量,在PATH中加入这几个dll文件所在的目录。
方法三:在eclipse的Java项目中导入原生库文件。操作方法是:
在eclipse的包资源管理器中,右单击项目名→导入→常规→文件系统→下一步→浏览→选择DLL文件所在目录→确定→勾选DLL文件→完成。
导入SWT的原生库文件后,还要在eclipse的Java项目中配置构建路径,添加外部JAR,将文件加入到项目中,操作方法是:
在eclipse的包资源管理器中,右单击项目名→构建路径→配置构建路径→库(L)→添加外部JAR→在eclipse的plugins文件夹中到该jar文件→打开→确定。
在Java应用程序中使用SWT的组件。
操作步骤:
新建一个Java项目,项目名为:sample4_1。
采用方法三在项目中导入原生库文件。
配置构建路径,将加入到项目中。eclipse包资源管理器可以看到导入的原生库文件和引入的jar文件,如图所示。
在项目中新建一个类,文件名为。
在类文件中写入代码。
   
    图 包资源管理器                图 程序运行结果
文件内容如下:
package ;
import      class HelloSWT {
   
    public static void main(String[] args) {
        Display display=new Display();etSystemColor);
        Label lb2=new Label(shell,; etText("");
                    new MenuItem(newFileMenu,.setText("");
                }
                MenuItem openFileItem=new MenuItem(fileMenu,;
                ("打开&O");
                MenuItem exitItem=new MenuItem(fileMenu,;
                ("退出&E");
            }
            MenuItem helpItem=new MenuItem(mainMenu,;
            ("帮助&H");
        }
        ();
        ();
        while(!()){  etText("超宽按钮1");etText("按钮2");
    new Button(shell,.setText("按钮3");
    new Button(shell,.setText("按钮4");
例 充满式布局示例。
package ;
import    class Sample4_11 {
    public static void main(String[] args) {
        Display display=new Display();etText("超宽按钮1");etText("按钮2");
        new Button(shell,.setText("按钮3");
        new Button(shell,.setText("按钮4");
        ();
        ();
        while(!()){  etText("按钮2");
        new Button(shell,.setText("按钮3");
        new Button(shell,.setText("按钮4");
        ();      etText("B1");
        new Button(shell, .setText("超宽按钮 2");
        new Button(shell, .setText("按钮 3");
        new Button(shell, .setText("B4");
        new Button(shell, .setText("按钮 5");
        ();
java设置环境变量的方法代码
        ();
        while (!()) {
              if (!()) ();
        }
        ();
    }
}
当分别为1、2、3时,按钮依次按1列、2列和3列排列,运行结果如图~所示;当makeColumnsEqualWidth=true时,虽然按钮宽度不同,但列宽相同,如图所示;当horizontalSpacing=30时,列间距为30,如图所示。
           
numColumns = 1  图 numColumns = 2  图 numColumns = 3
 
图 makeColumnsEqualWidth=true      图 horizontalSpacing=30
2.布局数据类(GridData类)
GridData是GridLayout专用的布局数据类,用GridData可以构建很多复杂的布局方式。GridData的构造方法如下:
GridData();  创建一个属性值为默认值的对象。
GridData(int type);  创建一个指定类型(type)的对象。
GridData常用类型如下:
  通常与GridData类的对象属性horizontalAlignment和verticalAlignment配合使用,充满对象属性指定的空间。
GridData. FILL_HORIZONTAL  水平充满,组件充满网格水平方向的空间。
GridData. FILL_VERTICAL  垂直充满,组件充满网格垂直方向的空间。
GridData. FILL_BOTH  双向充满,组件充满水平和垂直方向的空间。
水平对齐靠左,组件在网格中靠左放置。
水平对齐居中,组件在网格中居中放置。
  水平对齐靠右,组件在网格中靠右放置。
GridData常用对象属性如下:
int horizontalSpan  设置组件占用的列数,默认值为1。
int verticalSpan  设置组件占用的行数,默认值为1。
horizontalAlignment  设置组件的对齐方式为水平方向。
verticalAlignment    设置组件的对齐方式为垂直方向。
grabExcessHorizontalSpace  抢占额外的水平空间。
grabExcessVerticalSpace  抢占额外的垂直空间。
horizontalAlignment和verticalAlignment可以取以下值:
BEGINNING  开始(水平对齐时居左;垂直对齐时居上)
    CENTER  居中
    END  结束(水平对齐时居右;垂直对齐时居下)
    FILL  充满
默认的horizontalAlignment值是BEGINNING。默认的verticalAlignment值是CENTER。
例 使用gridData布局。
package ;
import    class Sample4_14 {
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        ("GridData示例");
        GridLayout gridLayout = new GridLayout();etText("超宽按钮 2");
        new Button(shell, .setText("按钮 3");
        Button b4=new Button(shell, ;
        ("B4");
        etText("按钮 6");
        Text t1=new Text(shell,;
        ("文本框 1");
        gridData = new GridData();
          = 2;    etText("按钮 7");
        new Button(shell, .setText("按钮 8");
        ();
        ();
        while (!()) {
              if (!()) ();
        }
        ();
    }
}
运行结果如图所示。虽然按钮b1和文本框t1都占两行两列,但由于t1水平方向和垂直方向的alignment属性都是FILL,因此文本框t1充满了两行和两列的空间,而按钮b1的horizontalalig
nment属性是CENTER,而verticalalignment属性是FILL,所以水平方向居中放置,而垂直方向充满了两行。按钮b4和b5采用了不同的构造方法来创建gridData对象,但都充满了该列的水平空间。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。