首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Swing 佈局管理器 BoxLayout 完整指南與實戰範例

     編輯:Java 相關知識

BoxLayout 簡介

BoxLayout 允許組件沿單一軸向 (水平或垂直) 排列,比 FlowLayout 更靈活,且不像 GridBagLayout 那麼複雜。它需在建構時指定目標容器與軸向,常與 Box 容器配合建立彈性間距。

核心建構子與常數

public BoxLayout(Container target, int axis)

// 四種軸向常數
BoxLayout.X_AXIS      // 左到右 (水平)
BoxLayout.Y_AXIS      // 上到下 (垂直)
BoxLayout.LINE_AXIS   // 依 ComponentOrientation 決定行方向
BoxLayout.PAGE_AXIS   // 依 ComponentOrientation 決定頁面流向

常用方法

  • getAxis():取得軸向
  • getTarget():取得目標容器
  • getLayoutAlignmentX/Y(Container):取得對齊方式

組件對齊控制

BoxLayout 依據組件的 setAlignmentX/Y(float) 對齊 (0.0=左/上, 0.5=置中, 1.0=右/下)。垂直佈局看 X 對齊,水平佈局看 Y 對齊。

完整範例:垂直佈局與對齊展示

import javax.swing.*;
import java.awt.*;

public class BoxLayoutDemo {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); }
            catch (Exception ignored) {}

            JFrame frame = new JFrame("BoxLayout Demo");
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            Container pane = frame.getContentPane();
            pane.setLayout(new BoxLayout(pane, BoxLayout.Y_AXIS));

            // 不同對齊方式的按鈕
            for (float align = 0.0f; align <= 1.0f; align += 0.25f) {
                JButton btn = new JButton("X Alignment = " + align);
                btn.setAlignmentX(align);
                pane.add(btn);
            }

            // 加入彈性空間
            pane.add(Box.createVerticalGlue());
            pane.add(new JButton("底部按鈕 (Glue 將其推至底部)"));

            frame.setSize(400, 400);
            frame.setLocationRelativeTo(null);
            frame.setVisible(true);
        });
    }
}

進階技巧:Box 容器與彈性空間

Box verticalBox = Box.createVerticalBox();
verticalBox.add(new JLabel("頂部標籤"));
verticalBox.add(Box.createRigidArea(new Dimension(0, 10))); // 固定間距
verticalBox.add(new JButton("中間按鈕"));
verticalBox.add(Box.createVerticalGlue()); // 彈性空間,佔據剩餘區域
verticalBox.add(new JLabel("底部標籤"));

Box horizontalBox = Box.createHorizontalBox();
horizontalBox.add(Box.createHorizontalGlue());
horizontalBox.add(new JButton("右對齊按鈕"));

巢狀佈局實現複雜介面

結合水平與垂直 Box 可實現類似 GridBagLayout 的效果:

Box mainBox = Box.createVerticalBox();
Box row1 = Box.createHorizontalBox();
row1.add(new JLabel("姓名:"));
row1.add(Box.createHorizontalStrut(10));
row1.add(new JTextField(15));
mainBox.add(row1);
mainBox.add(Box.createVerticalStrut(10));

Box row2 = Box.createHorizontalBox();
row2.add(new JLabel("郵箱:"));
row2.add(Box.createHorizontalStrut(10));
row2.add(new JTextField(15));
mainBox.add(row2);

最佳實踐建議

  1. 使用 Box.createVertical/HorizontalBox() 建立中繼容器,避免直接在 JFrame contentPane 佈局。
  2. 善用 RigidArea (固定間距)、Glue (彈性間距)、Strut (單向間距)。
  3. 設定組件 setAlignmentX/Y 確保視覺對齊一致。
  4. 複雜表單建議改用 MigLayout (第三方) 或 GridBagLayout。
  5. 所有 Swing 操作必須在 EDT (Event Dispatch Thread) 執行,使用 SwingUtilities.invokeLater。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved