作者以天文學演進比喻 GridBagLayout:
GridBagLayout 如同地心說:單一布局管理器試圖解決所有對齊問題,導致 GridBagConstraints 參數爆炸 (gridx, gridy, gridwidth, gridheight, weightx, weighty, anchor, fill, insets, ipadx, ipady...)。// 外層:BorderLayout 區隔主要區域
mainPanel.setLayout(new BorderLayout());
mainPanel.add(toolbar, BorderLayout.NORTH);
mainPanel.add(content, BorderLayout.CENTER);
mainPanel.add(statusbar, BorderLayout.SOUTH);
// 內層:FlowLayout/GridLayout/BoxLayout 精細排列
content.setLayout(new GridLayout(0, 2)); // 兩欄自動換行
// 或
formPanel.setLayout(new BoxLayout(formPanel, BoxLayout.Y_AXIS));
// 或
buttonPanel.setLayout(new FlowLayout(FlowLayout.RIGHT));
| 維度 | GridBagLayout | 巢狀面板組合 |
|---|---|---|
| 認知複雜度 | 極高 (11 參數) | 低 (每層單一布局邏輯) |
| 維護性 | 差 (牽一髮動全身) | 好 (局部修改不影響他處) |
| 可讀性 | 低 (參數雜亂) | 高 (結構對應視覺階層) |
| 效能 | 較慢 | 快 (簡單布局計算) |
| 視覺化工具支援 | 好 (但生成代碼難讀) | 好 (結構清晰) |
"wrap 2, fillx, ins 5",極度簡潔強大,社區推薦替代 GridBagLayout。GridPane (類 GridBag 但更簡潔)、HBox/VBox、BorderPane、AnchorPane、TilePane、FlowPane,配合 CSS 間距/對齊,宣告式 FXML 更直觀。GridBagLayout 是「瑞士刀」:功能全但沉重、難用。現代最佳實踐:分解複雜介面為層次化簡單佈局組合。這不只是技術選擇,更是軟體設計分解複雜度核心原則在 UI 層的體現。