SWT(Standard Widget Toolkit)是 IBM 開發的跨平台 GUI 工具包,以「原生優先、模擬補齊」機制兼顧效能與一致性。本文解析 SWT 設計動機、核心架構與 Eclipse 開發環境配置步驟。
AWT 使用原生組件,但受限於「最低公倍數」原則:平台 A 有組件 1~40,平台 B 有 20~25,AWT 僅能提供交集,導致平台特色功能缺失。
Swing 全模擬繪製解決 LCD 問題,但帶來三大副作用:
透過 JNI 直接調用原生組件;若宿主平台缺失對應組件,自動降級為模擬實現。兼得原生速度、原生外觀、跨平台一致性。
| 組件 | 職責 |
|---|---|
| Display | 管理事件迴圈、控制 UI 執行緒與非 UI 執行緒通訊 |
| Shell | 受作業系統視窗管理器管理的頂層視窗;每個應用至少需一個 Display + 一個 Shell |
| Widgets | 按鈕、文字框、表格等具體控制項 |

new Shell(display),主視窗new Shell(parentShell),依賴父視窗,預設風格組件屬性須在建構時透過 Style Bits 指定,如 SWT.PUSH | SWT.BORDER 組合建立帶邊框的按鈕。
swt.jar-Djava.library.path=你的_eclipse/plugins/org.eclipse.swt.win32_版本/os/win32UnsatisfiedLinkError 即配置成功java.lang.UnsatisfiedLinkError: no swt-win32-2136 in java.library.path
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:108)
...
原因:swt.jar 依賴原生 DLL,需正確設定 java.library.path 指向對應平台的 os/win32(或 linux/macosx)目錄。
Runtime.getRuntime().loadLibrary("yourNativeLib");
SWT 以 JNI 橋接原生組件,在效能、外觀、跨平台三角取得最佳平衡。掌握 Display/Shell/Widget 三層架構與 Style Bits 機制,配合 Eclipse 正確配置類路徑與原生庫路徑,即可高效開發原生級桌面應用。