優秀 GUI 設計在現實世界有對應表現。鍵盤按鍵:一部分賦予動作特性(可按下),另一部分負責表現(代表 A 或 B)。這兩點蘊含強大設計方法:鼓勵復用而非重新設計。按鈕機理相同,頂部噴不同字母即得「不同」按鈕,無需為每個按鈕重新設計圖紙,大幅降低難度。
將此思想應用到軟體開發,Model/View/Controller (MVC) 便是這一實現。雖 MVC 常用於設計整個 GUI,但 JFC (Swing) 設計者獨創性地將 MVC 用於設計單個組件:JTable、JTree、JComboBox 等,每個組件都有 Model、View、Controller,且可獨立改變(甚至運行時),使 GUI 工具包極其靈活。
鍵盤按鍵類比:Model = 整個機械裝置,View/Controller = 按鍵表面(常合併為 UI)。
按鈕 Model 行為由 ButtonModel 介面定義。實例封裝內部狀態、定義行為。方法分四類:
程式員通常不直接操作 Model/View/Controller,它們隱藏在繼承自 java.awt.Component 的組件中,這些組件像膠水將 MVC 合三為一。Swing 組件多直接繼承對應 AWT 組件,提供更便利功能,通常無需混合使用。
這種組件級 MVC 是 Swing 靈活性的核心來源,也是現代 GUI 框架(如 JavaFX、React、Flutter)繼承發揚的設計精髓。