?????? 由于無(wú)法忍受AWT或SWING的怪異界面和蝸牛般的速度,最近起了學(xué)習(xí)SWT的沖動(dòng)。SWT(Standard? Widget? Toolkit)是由IBM推出的基于JAVA的圖形界面開(kāi)發(fā)庫(kù),之所以要說(shuō)他是“基于JAVA的”的是因?yàn)樵诔绦蛟帉懘a時(shí)使用的JAVA語(yǔ)言,然而事實(shí)上,swt的底層代碼是由C語(yǔ)言來(lái)實(shí)現(xiàn)的,這點(diǎn)可以從Swt為什么要發(fā)布基于windows,linux……的操作系統(tǒng)的不同的包體現(xiàn)出來(lái)。swt比起awt和swing來(lái)說(shuō),不可同日而語(yǔ),并且swt具有很好的穩(wěn)定性,他最大化了操作系統(tǒng)的圖形構(gòu)件API,只要操作系統(tǒng)提供了相應(yīng)的圖形構(gòu)件,swt會(huì)用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();
// 開(kāi)始事件處理循環(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中了。接下來(lái)的shell.open()將該shell打開(kāi),只有將shell打開(kāi)之后,基于此shell上的組件才能被顯示出來(lái)。接下來(lái)的語(yǔ)句就是一個(gè)處理這個(gè)shell中事件的語(yǔ)句,在shell沒(méi)有被關(guān)閉前(shell.isDisposed()),系統(tǒng)會(huì)將所有的事件從事件隊(duì)列中取出,然后一個(gè)一個(gè)處理,如果沒(méi)有事件發(fā)生,則該display就處于sleep狀態(tài),等待事件發(fā)生后將其喚醒。當(dāng)shell關(guān)閉后,程序也就退出了。