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

Java Swing GridLayout 佈局管理器完整範例與技巧

     編輯:Java 相關知識

GridLayout 核心特性

  • 以「行 × 列」矩陣排列元件,依加入順序從左至右、上至下填充。
  • 可動態調整行數或列數(另一維度自動計算)。
  • 支援水平/垂直間距 setHgap()、setVgap()。
  • 不支援跨行跨列,適合計算機按鍵盤、棋盤等等寬高佈局。

完整可執行範例

package com.utstar.factory;

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

public class TestGridLayout extends JFrame {
    private static final long serialVersionUID = 6819222900970457455L;
    private JButton[] buttons = new JButton[6];

    public TestGridLayout() {
        setTitle("GridLayout 測試");
        setSize(600, 400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        init();
        setVisible(true);
    }

    private void init() {
        String[] labels = {"NORTH", "SOUTH", "EAST", "WEST", "CENTER", "CENTER6"};
        for (int i = 0; i < labels.length; i++) {
            buttons[i] = new JButton(labels[i]);
        }

        GridLayout layout = new GridLayout(2, 3); // 2 行 3 列
        layout.setHgap(10);
        layout.setVgap(10);
        setLayout(layout);

        for (JButton btn : buttons) {
            add(btn);
        }
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(TestGridLayout::new);
    }
}

關鍵技術點解析

  1. 建構子參數:new GridLayout(rows, cols)。若 rows=0 則由列數決定行數;若 cols=0 則由行數決定列數;兩者皆為 0 會拋出異常。
  2. 間距設定:setHgap(int)、setVgap(int) 僅影響元件間距,不影響邊框邊距;邊距請用 BorderFactory.createEmptyBorder()。
  3. 動態增減元件:add() 後呼叫 revalidate() + repaint() 即可即時重排。
  4. 替代方案:需跨行跨列請改用 GridBagLayout 或 MigLayout(第三方)。

常見錯誤與避坑指南

  • ❌ 直接 new GridLayout(2, 3) 卻加入 7 個元件 → 第 7 個會擠在新行,破壞原預期矩陣。
  • ❌ 忘記 setVisible(true) 放在最後,導致元件未正確佈局就顯示。
  • ✅ 建議在 SwingUtilities.invokeLater() 中建立 GUI,確保執行緒安全。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved