| 區域 | 調整行為 |
|---|---|
| North / South | 高度 = 元件偏好高度,寬度 = 容器寬度 (橫向填滿) |
| West / East | 寬度 = 元件偏好寬度,高度 = 剩餘高度 (縱向填滿) |
| Center | 佔據剩餘所有空間,雙向填滿 |
//: BorderLayout1.java
import java.awt.*;
import java.applet.*;
public class BorderLayout1 extends Applet {
public void init() {
setLayout(new BorderLayout());
int i = 0;
add("North", new Button("Button " + i++));
add("South", new Button("Button " + i++));
add("East", new Button("Button " + i++));
add("West", new Button("Button " + i++));
add("Center", new Button("Button " + i++));
}
} ///:~
// 舊寫法:字串魔術值,拼錯不報錯,執行期才發現
add("Nroth", comp); // 靜默失效,元件不顯示
// 新寫法:編譯期檢查,IDE 自動完成
add(comp, BorderLayout.NORTH);
add(comp, BorderLayout.SOUTH);
add(comp, BorderLayout.WEST);
add(comp, BorderLayout.EAST);
add(comp, BorderLayout.CENTER);
這是 Java Beans 屬性命名規範驅動的 API 改進,所有標準布局管理器皆支援常數定位。
add(comp) 等同 add(comp, BorderLayout.CENTER)Panel 等容器,巢狀構建複雜介面// 主視窗:BorderLayout
main.setLayout(new BorderLayout());
main.add(toolbar, BorderLayout.NORTH);
main.add(content, BorderLayout.CENTER);
main.add(statusbar, BorderLayout.SOUTH);
// 工具列內部:FlowLayout
toolbar.setLayout(new FlowLayout(FlowLayout.LEFT));
toolbar.add(btnNew); toolbar.add(btnOpen); toolbar.add(btnSave);
// 內容區:GridLayout 或 BorderLayout 再分割
content.setLayout(new BorderLayout());
content.add(treePanel, BorderLayout.WEST);
content.add(editorPanel, BorderLayout.CENTER);
| 技術 | 對應類別 | 增強功能 |
|---|---|---|
| Swing | BorderLayout (相容) | 無增強,但常搭配 BoxLayout/MigLayout 替代複雜巢狀 |
| JavaFX | BorderPane | CSS 樣式、動畫過渡、setTop/Bottom/Left/Right/Center 型別安全方法 |
| Web CSS | Flexbox / Grid | grid-template-areas: "header header" "sidebar main" "footer footer" 宣告式區域命名 |
"North" 有效,"north" 無效 (舊 API)。務必使用常數。add 會覆蓋,若需多元件請先裝入 Panel。getPreferredSize() 決定,自訂元件務必正確覆寫。BorderLayout 是「主視窗骨架」的經典選擇:五區域語意清晰、巢狀組合自然、零配置自適應。掌握型別安全常數與巢狀面板分層,能構建清晰可維護的介面架構。現代開發中 JavaFX BorderPane 繼承其精髓並加入 CSS/動畫能力,Web 則以 Grid/Flexbox 實現更強大的區域化佈局。