本章介紹 Java 2 Swing 元件庫,核心哲學:「簡單任務輕鬆完成,複雜任務也有解決之道」。重點涵蓋 Applet/Application 雙模式、事件模型、佈局管理、可插拔外觀、JavaBeans 元件架構與多執行緒安全。
SecurityManager 嚴格限制:無本地檔案/網路/系統資源存取權。| 方法 | 觸發時機 | 用途 |
|---|---|---|
init() | Applet 載入初始化 | 建立 UI 元件、載入資源(必須覆寫) |
start() | 頁面顯示/恢復 | 啟動動畫/執行緒 |
stop() | 頁面隱藏/離開 | 暫停耗資源操作 |
destroy() | 瀏覽器卸載 Applet | 釋放資源、關閉連線 |
關鍵差異:Swing Applet 需將元件加入 getContentPane(),而非直接 add()。
<applet> 標籤簡單但瀏覽器支援不一。<object> (IE/ActiveX) + <embed> (Netscape/Plugin) 雙標籤,JDK 提供 HTMLConverter 自動轉換。.jnlp XML 描述檔:指定 JAR、主類別、J2SE 版本、權限、資源下載策略。security 元素配合簽名 JAR 實現完全信任;未簽名可透過 FileOpenService 等 JNLP API 受限存取本地資源(需用戶運行時授權)。application/x-java-jnlp-file MIME 類型。addXxxListener() / removeXxxListener() 運行時動態增減監聽器。「將『做什麼』與『怎麼顯示』解耦,業務物件不依賴特定顯示技術,支援多層架構與邏輯複用。」
addActionListener(new ActionListener() { ... }) 匿名內部類。if (e.getSource() == btn) 型別檢查。SwingUtilities.invokeLater() 或 invokeAndWait() 回傳 EDT 更新 UI。getXxx()/setXxx() 命名慣例(boolean 可用 isXxx()),設計時可修改,運行時持久化。addXxxListener(XxxListener)/removeXxxListener(),標準監聽器模式。建構工具透過 Introspector.getBeanInfo(Class) 反射分析類別,自動建立屬性表/事件列表,無需特殊關鍵字或介面——純粹約定優於配置。
getXxx(int index)/setXxx(int index, Type) 陣列式屬性。PropertyChangeEvent 通知監聽器。VetoableChangeListener,可拋 PropertyVetoException 否決。MANIFEST.MF:Java-Bean: True 標記類別為 Bean。jar cfm Bean.jar manifest.mf package/,工具自動生成 META-INF/MANIFEST.MF 含簽名摘要。paintComponent() 通常不加同步,效能優先;若讀寫共享關鍵狀態則需評估加鎖。「感謝 Bruce Eckel 無私開源經典巨著,譯者 shhgs 讓英語盲也能零距離研讀。前輩風範,晚輩楷模。」