Java 憑藉「一次編寫,到處運行」在服務端與移動端大獲成功,桌面端曾因性能與外觀問題受質疑,但隨著硬件提升與 JDK 改進,現已具備構建企業級桌面應用的實力。
跨平台優勢
- 單一代碼庫運行於 Windows、macOS、Linux。
- 避免 .NET 綁定 Windows 生態,降低遷移成本。
- 新作業系統出現時,JVM 移植通常較快,守護長期投資。
圖形技術演進
AWT (Abstract Window Toolkit)
- 早期方案,封裝原生組件(Peer-based),組件有限:Button、TextField、List 等。
- 引入佈局管理器適應跨平台尺寸差異。
- 後擴展:事件模型、Java 2D、剪貼板、拖放、打印、無障礙訪問,合稱 JFC。
- 定位:簡單 Applet、極輕量 UI,不適合豐富桌面應用。
Swing
- 純 Java 繪製(Lightweight),不依賴原生 Peer,組件豐富:表格、樹、文本編輯器、標籤頁等。
- 可插拔外觀:Metal(跨平台統一)、Windows、macOS、GTK+ 等原生風格。
- MVC 架構:模型(數據)、視圖(UI)、控制器(事件)分離,
JTable 等複雜組件體現明顯。
- 早期版本 Bug 多、性能差(JDK 1.2/1.3),JDK 1.4+ 大幅改進,現已穩定高效。
- 主流 IDE(IntelliJ、NetBeans、JBuilder)均基於 Swing 構建。
SWT (Standard Widget Toolkit)
- IBM 為 Eclipse 開發,直接調用原生 OS 組件,外觀原生、性能接近原生應用。
- 提供瀏覽器嵌入 API(IE/Mozilla/WebKit),解決 Swing 渲染 HTML 弱項。
- 支持平台:Windows、Linux (GTK/Motif)、macOS、Solaris、AIX、HP-UX、QNX。
- 需分發平台特定共享庫,部署稍繁瑣。
三大工具包對比
| 維度 | AWT | Swing | SWT |
| 繪製方式 | Peer 原生 | 純 Java 繪製 | Peer 原生 |
| 組件豐富度 | 低 | 極高 | 高 |
| 跨平台一致性 | 高(但受限原生) | 高(可換膚) | 中(原生差異) |
| 性能 | 中 | 現代 JDK 優 | 優(原生) |
| 部署 | 無依賴 | 無依賴 | 需原生庫 |
| 典型場景 | Applet、簡單 UI | 企業級桌面、IDE | Eclipse RCP、需原生集成 |
常見誤區與避坑
- 「Swing 慢」:JDK 1.2/1.3 確實慢,PIII+256MB+JDK1.4+ 體驗流暢;現代硬件無感知。
- Bug 才是大敵:如 JDK 1.2
JTable 無法輸入 %&'($#!q 等字符(鍵碼衝突),需自定義 processKeyEvent 修復。源碼開放使 Workaround 成為可能。
- JFileChooser 早期殘陋:JDK 1.4 前功能缺失,多採用第三方或自研文件選擇器。
選型建議
- 純 Java、跨平台一致性優先、組件豐富 → Swing
- 需深度原生集成、嵌入瀏覽器、Eclipse RCP 生態 → SWT
- 極簡 UI、Applet 維護 → AWT
- 現代替代:JavaFX(JDK 8+ 內置,聲明式 UI、硬件加速、FXML/CSS 分離,新項目首選)。