每個 SWT 程式啟動都離不開 Display 與 Shell 兩大核心類。本文從經典 HelloWorld 切入,剖析它們的職責、關鍵 API 及配置技巧。
Display 物件Shell(視窗)shell.open() 顯示視窗readAndDispatch() / sleep() 直到視窗銷毀display.dispose() 釋放資源結束程式readAndDispatch():讀取 OS 事件佇列並分發給對應監聽器sleep():無事件時讓執行緒休眠,降低 CPU 佔用getShells():取得關聯且未銷毀的所有 ShellsetData/getData():掛載應用層全域資料Shell 代表一個頂層視窗,可包含任意控件樹。其外觀行為由樣式位(Style bits)控制,定義於 org.eclipse.swt.SWT:
| 樣式常量 | 效果 |
|---|---|
| SWT.BORDER | 邊框 |
| SWT.CLOSE | 關閉按鈕 |
| SWT.MIN / SWT.MAX | 最小化/最大化按鈕 |
| SWT.RESIZE | 可調整大小 |
| SWT.TITLE | 標題列 |
| SWT.SHELL_TRIM | 組合:TITLE | CLOSE | MIN | MAX | RESIZE(預設完整視窗) |
| SWT.NO_TRIM | 無裝飾(無標題列、邊框、按鈕) |
| SWT.APPLICATION_MODAL / SYSTEM_MODAL / PRIMARY_MODAL | 模態層級 |
// 僅有關閉按鈕、不可縮放、系統模態
Shell shell = new Shell(display, SWT.CLOSE | SWT.SYSTEM_MODAL);
注意:樣式為「暗示」,受限於底層視窗管理器,不保證所有平台完全一致。
open() / close():顯示/關閉setVisible(boolean) / setEnabled(boolean):可見/啟用setActive():設為活躍視窗pack():依佈局與子控件首選尺寸自動調整視窗大小setText(String):設定標題理解 Display 與 Shell 的分工協作,是掌握 SWT 視窗程式設計的第一步。接著我們將探索佈局管理器,實現彈性自適應介面。