?????? 由于無法忍受AWT或SWING的怪異界面和蝸牛般的速度,最近起了學(xué)習(xí)SWT的沖動。SWT(Standard? Widget? Toolkit)是由IBM推出的基于JAVA的圖形界面開發(fā)庫,之所以要說他是“基于JAVA的”的是因為在程序元編寫代碼時使用的JAVA語言,然而事實上,swt的底層代碼是由C語言來實現(xiàn)的,這點可以從Swt為什么要發(fā)布基于windows,linux……的操作系統(tǒng)的不同的包體現(xiàn)出來。swt比起awt和swing來說,不可同日而語,并且swt具有很好的穩(wěn)定性,他最大化了操作系統(tǒng)的圖形構(gòu)件API,只要操作系統(tǒng)提供了相應(yīng)的圖形構(gòu)件,swt會用JNI技術(shù)去調(diào)用他們,只有在那些操作系統(tǒng)中不存在的圖形構(gòu)件,swt才回去實現(xiàn)他們。
??? public class FirstSwt{
public static void main(String [] args) {
Display display = new Display();
Shell shell = new Shell(display);
shell.open();
// 開始事件處理循環(huán),直到用戶關(guān)閉窗口
while (!shell.isDisposed()) {
if (!display.readAndDispatch())
display.sleep();
}
display.dispose();
}
}
這是一個swt最基礎(chǔ)的程序,也是一個很基礎(chǔ)的模式,程序中首先定義了用Display display = new Display();定義了一個容器(component),然后用Shell shell = new Shell(display);定義了一個窗口(window),display是一個最大的容器,在此容器上可以放置很多shell,類似于awt的思想,每個組件自然就應(yīng)該放置在shell中了。接下來的shell.open()將該shell打開,只有將shell打開之后,基于此shell上的組件才能被顯示出來。接下來的語句就是一個處理這個shell中事件的語句,在shell沒有被關(guān)閉前(shell.isDisposed()),系統(tǒng)會將所有的事件從事件隊列中取出,然后一個一個處理,如果沒有事件發(fā)生,則該display就處于sleep狀態(tài),等待事件發(fā)生后將其喚醒。當(dāng)shell關(guān)閉后,程序也就退出了。