單一工具包無法滿足所有場景。AWT 是最原始標準配置,Swing 解決 AWT 缺陷,SWT 結合兩者優點並針對 Eclipse 需求設計。選型需依專案需求:可移植性、原生外觀、效能、開發效率。
Component、Container、Button、TextField、Frame、Dialog 等FlowLayout、BorderLayout、GridBagLayout 等JTable、JTree、JTabbedPane...)、模型-視圖分離、可換膚、無障礙支援完善、跨平台行為一致JComponent 子類)+ 少量重量級頂層容器Widget、Control、Composite、Shell、Table、Tree、Browser(內嵌瀏覽器)FillLayout、FormLayout、GridLayout、RowLayout、StackLayout| 功能 | AWT | Swing | SWT |
|---|---|---|---|
| 表格 | N/A | JTable | Table |
| 樹 | N/A | JTree | Tree |
| 分頁籤 | N/A | JTabbedPane | TabFolder/CTabFolder |
| 內嵌瀏覽器 | N/A | JEditorPane (HTML 3.2) | Browser (原生引擎) |
| 系統托盤 | N/A | N/A | Tray |
| 拖放 | 基本 | 完整 | 原生 |
| 無障礙 | 無 | 完整 API | 依賴平台 |
| 圖形繪製 | Graphics2D | Graphics2D | GC (基礎) |
| 資源銷毀 | 自動 | 自動 | 手動 |
| 線程安全 | 是 | 否 | 否 |
| 構建方式 | 雙向 | 雙向 | 自頂向下 |
| 部署依賴 | 無 | 無 | JAR+原生庫 |
理解三大工具包的設計哲學與權衡,才能為專案做出最佳技術決策。Swing 贏在架構純粹與可移植性,SWT 贏在原生效能與整合,AWT 存活於極簡場景。