View on GitHub

Eclipse Tutorial

Ecsoya

online tutorialsWIKIoffline tutorialsPPT

Standard Widget Toolkit

SWT是eclipse中用来开发界面的核心组件。它提供了按钮(Button),文本(Text),标签(Label)等等的基本组件,也拥有很多的布局管理(Layout Management)和事件处理机制(Event Handlers)。

SWT最大的特点是它不但能运行在多种操作系统(Windows, Mac OS及Linux),而且它的实现都是尽可能的应用JNI调用操作系统本地的API,所以生成的界面跟操作系统的风格比较接近。

1. Hello World

我们先来一个HelloWolrd看看吧。

import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class HelloWorld {

    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("Hello World");
        shell.setSize(300, 200);
        shell.open();

        while(!shell.isDisposed()){
            if (!display.readAndDispatch()){
                display.sleep();
            }
        }
        display.dispose();
    }

}

运行起来的效果如下:

我们来简单看一下这个例子,一个窗口,标题为“Hello World”,大小为300x200. 再来看一下代码,总共有两个对象,DisplayShell。然后对Shell进行了几个操作:

    shell.setText("Hello World"); //设置窗口的标题
    shell.setSize(300, 200); //设置窗口的大小
    shell.open();//打开窗口

2. DisplayShell

org.eclipse.swt.widgets.Displayorg.eclipse.swt.widgets.Shell是SWT应用程序中最关键的两个组件。通过上面的例子应该清楚,Shell就相当于一个窗口。而Display呢,是用来管理SWT应用程序的最核心组件,所有的事件的监听,字体,颜色,图片等资源的创建和销毁以及多线程的处理,UI线程和非UI线程的交互等等,都离不开Display

在每一个SWT的应用程序中,都至少有一个Display对象和一个Shell对象。

在上面的例子中,我们还看到下面一段代码:

        while(!shell.isDisposed()){
            if (!display.readAndDispatch()){
                display.sleep();
            }
        }
        display.dispose();

这些代码是用来做什么的呢?

  1. shell.isDisposed()display.dispose():dispose,销毁?yes,SWT中创建的所有组件,用完之后是需要销毁的,而且一旦销毁了,就不能再使用了。啊?每个组件都要销毁,那我有那么多按钮啊,文本啊什么的,都要一个一个来销毁吗?no,也没有那么复杂,只要把最底层的那个容器(Composite)销毁就好了。
  2. display.readAndDispatch():read,读,dispatch,分发,没错,这句说的就是Display的重要功能,事件处理。因为SWT本身没有提供对各个组件的事件的监听,它是通过Display和本地系统建立一套循环监听的机制,当有任何事件(键盘,鼠标,触摸屏等)发生时,系统会第一时间把这些事件传递给Display,然后由Display分发到各个SWT控件中。 而当前这段语句,就是在判断,Display是否在进行事件的读写和分发。
  3. display.sleep():sleep,睡吗?没错,没事了就休息一会吧,不然老占用系统资源也不太地道。

3. 怎么应用SWT?

说了这么多,究竟SWT怎么用呢?

So easy? 没错,赶紧试试上面的Hello World吧!


参考资料:


Back to Home 下一篇:SWT Widgets