核心原因
- 跨平台一致性:Swing 繪製自有元件 (Lightweight),不呼叫 OS 原生 API,導致在 Windows/macOS/Linux 上外觀一致,但**與各平台原生視覺語言脫節**,使用者覺得「不對勁」。
- 預設 Look & Feel (Metal) 過時:預設風格停留在 90 年代風格,缺乏現代設計語系 (Material, Fluent, Cupertino)。
- 客製化門檻高:雖可透過
UIManager、自訂 ComponentUI、繼承 JComponent 覆寫 paintComponent 達到任意外觀,但需深入理解 Swing 架構,工時大。
對比
純 Win32 API 寫的視窗若不加主題同樣「醜」,但開發者習慣呼叫系統主題。Swing 若套用 FlatLaf, Substance, Material UI 等第三方 Look & Feel,觀感可媲美原生/現代 App。
建議
- 新專案優先考慮 JavaFX (內建現代皮膚、CSS 樣式、FXML 分離介面)。
- 維護舊 Swing 專案可引入 FlatLaf 一鍵現代化。