getPreferredSize()),不被拉伸填滿LEFT, CENTER, RIGHT) + 水平/垂直間距//: FlowLayout1.java
import java.awt.*;
import java.applet.*;
public class FlowLayout1 extends Applet {
public void init() {
setLayout(new FlowLayout()); // 明確指定 (其實是預設)
for (int i = 0; i < 20; i++)
add(new Button("Button " + i));
}
} ///:~
// 靠左對齊,水平間距 10px, 垂直間距 5px
setLayout(new FlowLayout(FlowLayout.LEFT, 10, 5));
// 靠右對齊
setLayout(new FlowLayout(FlowLayout.RIGHT));
// 置中對齊 (預設)
setLayout(new FlowLayout(FlowLayout.CENTER));
Label label = new Label("Name:");
label.setAlignment(Label.RIGHT); // 無效!
add(label);
add(new TextField(20));
原因:Label 偏好寬度 = 文字寬度,無額外空間可對齊。FlowLayout 給元件的空間恰好等於其偏好尺寸。
解決:使用 BorderLayout (Label 放 West, TextField 放 Center) 或 GridBagLayout/MigLayout/FormLayout 實現表單對齊。
| 適用 | 不適用 |
|---|---|
| 工具列按鈕群組 | 表單欄位對齊 |
| 標籤雲、標籤選單 | 需要元件填滿寬度 |
| 簡單水平排列 (標籤+輸入框各佔一行) | 複雜網格對齊 |
| 動態元件增減 (標籤頁關閉按鈕等) | 固定欄位寬度需求 |
FlowLayout 相容,BoxLayout (X_AXIS) 提供彈性空白 (Box.createHorizontalGlue()) 更強大HBox / FlowPane:HBox:單行水平排列,支援 Hgrow 優先權分配剩餘空間FlowPane:自動換行版 FlowLayout,支援 CSS 間距/對齊display: flex; flex-wrap: wrap; gap: 8px; 現代流式佈局標準getMinimumSize()) 若大於偏好尺寸,可能導致換行異常,自訂元件需正確實作三尺寸方法。FlowLayout 是「水平流式排列」的純粹實現:簡單、自然、零配置。它是 Applet/Panel 的預設布局,適合不需對齊、不需填滿、自然換行的輕量排列。理解其偏好尺寸優先、無彈性空白特性,能避免濫用於表單/工具列等需求場景。現代開發中 BoxLayout/HBox/Flexbox 提供更豐富的流式佈局控制能力。