手動 setBounds() 佈局在視窗縮放、跨平台、國際化場景下維護成本極高。SWT 提供四大佈局管理器,以規則化算法自動安排控件位置大小,實現「寫一次佈局,隨處自適應」。

如圖所示的表單對齊、等寬分佈、響應式換行,若逐行寫座標計算極其繁瑣且易錯。Layout 將「佈局規則」封裝,套用於 Composite(Shell 也是 Composite),所有子控件自動遵循規則排列。
| Layout | 特點 | 適用場景 |
|---|---|---|
| FillLayout | 單行/單列填滿父容器,子控件等分空間 | 單一控件填滿、簡單均分 |
| RowLayout | 流式排列,超寬自動換行,支援間距、邊距、置中 | 工具列、按鈕組、標籤流 |
| GridLayout | 網格狀,支援跨行跨列、對齊、權重、最小寬高 | 表單、複雜對齊、響應式介面 |
| FormLayout | 依附關係佈局(控件邊緣掛鉤到父容器或其他控件) | 極度精確定位、重疊效果 |
// 1. 建立 Layout 實例(可配置參數)
GridLayout layout = new GridLayout();
layout.numColumns = 2; // 兩欄
layout.makeColumnsEqualWidth = true; // 等寬
layout.marginWidth = 10; // 邊距
// 2. 套用到 Composite/Shell
shell.setLayout(layout);
// 3. 子控件可選擇性配置 LayoutData 微調
Text text = new Text(shell, SWT.BORDER);
GridData gd = new GridData(SWT.FILL, SWT.CENTER, true, false); // 水平填滿、垂直置中、佔用多餘寬度
text.setLayoutData(gd);
每個 Layout 對應專屬 LayoutData 子類(GridData, RowData, FormData...),設定於控件而非容器,實現「全域規則 + 個性化例外」的靈活組合。
掌握 Layout,讓介面從「像素級硬編碼」進化為「規則驅動自適應」,是專業 SWT 開發者的必修課。