Posted on 2005-12-31 00:44
蓉之恋 阅读(311)
评论(0) 编辑 收藏 所属分类:
SWT/JFace
本文主要对于SWT和SWT/JFace的GUI编程的对比,将介绍两个SWT重要的类:Display和Shell ;和JFace的ApplicationWindow类,两者在程序设计的时候对基层系统窗口类的调用和实现的不同之处和优缺点的对比。本文主要参考了《SWT JFace In Action》。
一,首先我们还是从一个例子出发吧~
HelloSWT.java
package net.kilu.jopen.helloswt;
import org.eclipse.swt.*;
import org.eclipse.swt.widgets.*;
public class HelloSWT
{
public static void main (String [] args)
{
// a, 配置和初始化
Display display = new Display();
Shell shell = new Shell(display);
//b, 添加widgets到shell中
Text helloText = new Text(shell, SWT.CENTER);
helloText.setText("Hello SWT!");
helloText.pack();
//c, GUI操作
shell.pack();
shell.open();
while (!shell.isDisposed())
{
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
以上例子主要分成3部分:
a, 首先创建了Display和Shell类的两个实例,使得GUI操作能访问最底层平台的资源并创建主要的窗口察看组件。
b, 下一步添加Text文本组件到Shell中,这些文本是根据构建GUI的函数模块来添加配置的。Widgets和成组的widgets是以shell的子类添加的,也可以添加相应的监听器和事件都是根据需要的,在这里pack()方法是告诉Shell和Text组件能够使用可能大的空间。
c, 最后部分就是描述了GUI的操作了,从这点出发,所以的程序代码除了初始化变量外什么都不做,但是当Shell的open()方法被调用时,程序的主窗口和它的子类就显示出来了,只要Shell一直是被调用的,Display的实例使用readAndDispatch()方法保持循环执行并等待平台的事件的响应。当被用户使用关闭事件时,相关的Display对象(像Shell和Shell的子类等)就会跟系统底层平台断开。
附SWT的类之间的通信和构建用户界面: