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

SWT/JFace FillLayout 佈局管理器:最簡單的等分佈局指南

     編輯:Java 相關知識

前言

FillLayout 是 SWT 中最簡單的佈局管理器。它將父容器的客戶區域平均劃分給所有子元件,每個元件獲得相同尺寸,排列方向可選水平或垂直。適合工具欄、狀態欄、單元件填滿等簡單場景。

核心特性

  • 等分原則:所有子元件寬高相同(水平模式下高度相同、寬度均分;垂直模式下寬度相同、高度均分)。
  • 單行/單列:不支援換行/換列,超出範圍元件將被截斷或擠壓。
  • 極簡 API:僅有方向、邊距、間距三類屬性。

構造與屬性

// 構造:指定方向
FillLayout layout = new FillLayout(SWT.HORIZONTAL); // 預設水平
FillLayout layout = new FillLayout(SWT.VERTICAL);   // 垂直

// 屬性
layout.marginWidth = 5;   // 左右邊距
layout.marginHeight = 5;  // 上下邊距
layout.spacing = 3;       // 元件間距

// 套用
shell.setLayout(layout);

完整範例:垂直排列三個按鈕

public class FillLayoutSample {
    public static void main(String[] args) {
        Display display = new Display();
        Shell shell = new Shell(display);
        shell.setText("FillLayout Demo");

        FillLayout layout = new FillLayout(SWT.VERTICAL);
        layout.marginHeight = 5;
        layout.marginWidth = 5;
        layout.spacing = 1;
        shell.setLayout(layout);

        new Button(shell, SWT.PUSH).setText("button1");
        new Button(shell, SWT.PUSH).setText("button number 2");
        new Button(shell, SWT.PUSH).setText("3");

        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch()) display.sleep();
        }
        display.dispose();
    }
}

適用場景與限制

場景是否適合說明
工具欄按鈕組✅ 適合水平等分,間距固定
狀態欄分區✅ 適合垂直/水平等分
單元件填滿容器✅ 完美唯一子元件自動佔滿
表單佈局❌ 不適合需標籤/輸入框對齊,用 GridLayout/FormLayout
複雜響應式介面❌ 不適合無 span、grab、alignment 機制
元件數量動態變化⚠️ 勉強會重新等分,尺寸劇烈跳動

進階技巧

1. 單元件填滿(最常用)

shell.setLayout(new FillLayout()); // 預設水平
Text text = new Text(shell, SWT.MULTI | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
// Text 自動填滿整個 Shell 客戶區

2. 結合 Composite 分區

// 頂層垂直分區:工具欄 + 內容區
FillLayout mainLayout = new FillLayout(SWT.VERTICAL);
shell.setLayout(mainLayout);

Composite toolbar = new Composite(shell, SWT.NONE);
toolbar.setLayout(new FillLayout(SWT.HORIZONTAL));
new Button(toolbar, SWT.PUSH).setText("New");
new Button(toolbar, SWT.PUSH).setText("Open");
new Button(toolbar, SWT.PUSH).setText("Save");

Composite content = new Composite(shell, SWT.BORDER);
content.setLayout(new FillLayout()); // 單元件填滿
new Text(content, SWT.MULTI | SWT.BORDER);

3. 動態切換方向

FillLayout layout = new FillLayout(SWT.HORIZONTAL);
shell.setLayout(layout);

// 運行時切換
Button toggle = new Button(shell, SWT.CHECK);
toggle.setText("Vertical");
toggle.addListener(SWT.Selection, e -> {
    layout.type = toggle.getSelection() ? SWT.VERTICAL : SWT.HORIZONTAL;
    shell.layout(true); // 重新佈局
});

與其他佈局對比

佈局複雜度彈性典型用途
FillLayout最低僅等分工具欄、單元件填滿、簡單分區
RowLayout低換行、間距、尺寸流式排列、標籤雲、動態按鈕組
GridLayout中網格、span、grab、對齊表單、屬性頁、複雜對話框
FormLayout高像素級附著、相對定位精確對話框、響應式重疊介面

總結

FillLayout 是「簡單場景的最佳選擇」:

  • 一行代碼搞定等分/填滿。
  • 零配置即可工作,維護成本極低。
  • 組合 Composite可構建多層次簡單介面。
  • 超出能力範圍時,果斷升級到 RowLayout/GridLayout/FormLayout。

記住:簡單就是力量。當 FillLayout 滿足需求時,不要引入更複雜的佈局。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved