本文主要對于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的類之間的通信和構建用戶界面: