SWT類似於JDK的AWT/Swing,它依賴本機作業系統GUI控制項的實現,以建立Java版的GUI控制項。SWT與AWT/Swing的不同之處是SWT使用了許多本機視窗小組件,這是SWT(標準小視窗工具箱)得名之故。
由於視窗小組件系統與生俱來的複雜性以及不同系統之間的差別,即使在理想情況下,要實現和維護平台的視窗小組件庫也是很難的。目前,有幾種技術能夠明顯減少問題的複雜度,SWT庫採用了這些技術中的底層實現技術。Eclipse提供的SWT使用JNI叫用作業系統的內部API,所以能夠實現與本機應用程式相同外觀。不僅如此,SWT還可以在Java方法的操系統的調用之間建立一對一的對應關係。事實上這也是SWT取得成功的最重要因素之一。
下面是在Eclipse中使用SWT的配置過程:
第一步:無論是建立項目還是已有的項目,使用SWT只需要項目中加入SWT庫即可。方法是在項目屬性中的Libraries添加檔案 /eclipse/plugins/org.eclipse.swt.win32.win32.x86_3.1.1.jar
上面的目前的目錄的Eclpse的安裝目錄。
第二步:找到目錄eclipse/configuration/org.eclipse.osgi/bundles/5/1/.cp,拷檔案swt-win32-3139.dll到c:/windows/system32下即可。
完成以上兩步後即可在Eclipse下開始SWT應用程式了,下面是一個SWT的例子,摘自《Eclipse編程技術與執行個體》一書P268中,代碼如下:
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;
public class MyLabel ...{
private Label myLabel;
private Shell shell;
private Display display;
public MyLabel()
...{
super();
display = new Display();
shell = new Shell(display);
shell.setSize(200,200);
myLabel = new Label(shell, SWT.NONE);
myLabel.setBounds(38,21,100,18);
myLabel.setText("Hello, World!");
}
public void start()
...{
shell.open();
while(!shell.isDisposed())
...{
if(!display.readAndDispatch())
...{
display.sleep();
}
}
}
public static void main(String[] args) ...{
MyLabel label = new MyLabel();
label.start();
}
}
運行一下即行看到一個視窗,與window的應用程式長得一模一樣,呵呵!
當然,如果不在Eclipse下採用SWT進行開發也是可以的。方法也是與上面一樣,添加相應的.jar到classpath指定的目錄中,或當前項目的lib目錄下,同時要把相應的.dll檔案拷貝到c:/windows/system32/目錄下。不同的是要下載一個SWT庫即可。
本文中Eclispe版本為3.1.1