由于无法忍受AWT或SWING的怪异界面和蜗牛般的速度,最近起了学习SWT的冲动。SWT(Standard Widget Toolkit)是由IBM推出的基于JAVA的图形界面开发库,之所以要说他是“基于JAVA的”的是因为在程序元编写代码时使用的JAVA语言,然而事实上,swt的底层代码是由C语言来实现的,这点可以从Swt为什么要发布基于windows,linux……的操作系统的不同的包体现出来。swt比起awt和swing来说,不可同日而语,并且swt具有很好的稳定性,他最大化了操作系统的图形构件API,只要操作系统提供了相应的图形构件,swt会用JNI技术去调用他们,只有在那些操作系统中不存在的图形构件,swt才回去实现他们。
public class FirstSwt{
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();
}
}
这是一个swt最基础的程序,也是一个很基础的模式,程序中首先定义了用Display display = new Display();定义了一个容器(component),然后用Shell shell = new Shell(display);定义了一个窗口(window),display是一个最大的容器,在此容器上可以放置很多shell,类似于awt的思想,每个组件自然就应该放置在shell中了。接下来的shell.open()将该shell打开,只有将shell打开之后,基于此shell上的组件才能被显示出来。接下来的语句就是一个处理这个shell中事件的语句,在shell没有被关闭前(shell.isDisposed()),系统会将所有的事件从事件队列中取出,然后一个一个处理,如果没有事件发生,则该display就处于sleep状态,等待事件发生后将其唤醒。当shell关闭后,程序也就退出了。