?????? 由于無法忍受AWT或SWING的怪異界面和蝸牛般的速度,最近起了學(xué)習(xí)SWT的沖動。SWT(Standard? Widget? Toolkit)是由IBM推出的基于JAVA的圖形界面開發(fā)庫,之所以要說他是“基于JAVA的”的是因?yàn)樵诔绦蛟帉懘a時(shí)使用的JAVA語言,然而事實(shí)上,swt的底層代碼是由C語言來實(shí)現(xiàn)的,這點(diǎ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才回去實(shí)現(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();
}
}
這是一個(gè)swt最基礎(chǔ)的程序,也是一個(gè)很基礎(chǔ)的模式,程序中首先定義了用Display display = new Display();定義了一個(gè)容器(component),然后用Shell shell = new Shell(display);定義了一個(gè)窗口(window),display是一個(gè)最大的容器,在此容器上可以放置很多shell,類似于awt的思想,每個(gè)組件自然就應(yīng)該放置在shell中了。接下來的shell.open()將該shell打開,只有將shell打開之后,基于此shell上的組件才能被顯示出來。接下來的語句就是一個(gè)處理這個(gè)shell中事件的語句,在shell沒有被關(guān)閉前(shell.isDisposed()),系統(tǒng)會將所有的事件從事件隊(duì)列中取出,然后一個(gè)一個(gè)處理,如果沒有事件發(fā)生,則該display就處于sleep狀態(tài),等待事件發(fā)生后將其喚醒。當(dāng)shell關(guān)閉后,程序也就退出了。