MigLayout 推送 VS 增长

2023-11-26

这两个约束有什么区别?

从文档中:

PUSH - 使组件所在的行和/或列随着“权重”而增长

GROW - 设置组件相对于同一单元中的其他组件的增长程度。

那么,主要的想法是缩小组件内部和外部的尺寸?


重要的是要明白fill,(列、行)grow, push协同工作 与(组件)grow定义布局。 (有两种不同的grow做不同事情的约束。)

MigLayout是一个基于网格的管理器。 (更准确地说,它最重要的模式是。) 需要完成两个步骤:

  • 定义网格的列和行占用多少空间
  • 定义组件在其分配的单元中占据多少空间)

这是什么fill,(列、行)grow, push和(组件)grow限制条件 帮助实现。前三个定义网格的列和行的增长, 最后一个定义了组件如何在其上传播 指定区域,例如它所在的单元格。请注意,填充或生长是指占据的趋势或渴望 布局中的空白区域。不被列、行或其他元素占据的窗口区域 组件充满了空白空间。

The push和(列,行)grow采取可选的weight范围。它 定义列或行相对于其他列的增长程度 和行。这fill约束分布weight evenly.

(The push约束可用于在不同的上下文中使间隙变得贪婪。)

我提供了三个示例来阐明这些约束的用法。

Fill

The fill约束影响网格的所有单元。它们占据了所有可用空间。 (组件)grow约束指定组件如何在其细胞中传播。

package com.zetcode;

import java.awt.EventQueue;
import javax.swing.BorderFactory;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import net.miginfocom.swing.MigLayout;


public class MigLayoutFillEx extends JFrame {

    public MigLayoutFillEx() {

        initUI();

        setSize(300, 250);
        setTitle("Fill");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    private void initUI() {

        JPanel pnl = new JPanel(new MigLayout("fill"));

        pnl.add(getLabel("Area 1"), "cell 0 0, growx");
        pnl.add(getLabel("Area 2"), "cell 0 1, grow");
        pnl.add(getLabel("Area 3"), "cell 1 0 1 2, grow");

        add(pnl);
    }

    private JLabel getLabel(String text) {

        JLabel label = new JLabel(text, JLabel.CENTER);
        label.setBorder(BorderFactory.createEtchedBorder());

        return label;
    }

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                MigLayoutFillEx ex = new MigLayoutFillEx();
                ex.setVisible(true);
            }
        });
    }
}

在示例中我们有三个标签。

JPanel pnl = new JPanel(new MigLayout("fill"));

The fill是布局约束;它影响所有细胞。

pnl.add(getLabel("Area 1"), "cell 0 0, growx");
pnl.add(getLabel("Area 2"), "cell 0 1, grow");
pnl.add(getLabel("Area 3"), "cell 1 0 1 2, grow");

现在我们定义组件如何填充由 布局管理器。 区域 1 标签水平填充其分配的区域,其他区域 两个标签填充两个维度上的指定区域。

MigLayou fill

列、行增长

(列、行)grow约束影响特定列中的所有单元格 或行。

package com.zetcode;

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;


public class MigLayoutGrowEx extends JFrame {

    public MigLayoutGrowEx() {

        initUI();

        setSize(300, 250);
        setTitle("Grow constraint");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    private void initUI() {

        JPanel pnl = new JPanel(new MigLayout("wrap", "[grow]", "[][grow]"));

        JTextField field = new JTextField(10);
        JTextArea area = new JTextArea(10, 10);

        pnl.add(field, "growx");
        pnl.add(new JScrollPane(area), "grow");

        add(pnl);
    }

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                MigLayoutGrowEx ex = new MigLayoutGrowEx();
                ex.setVisible(true);
            }
        });
    }
}

在示例中我们有两个组件。文本字段预计会水平增长, 文本区域水平和垂直。

JPanel pnl = new JPanel(new MigLayout("wrap", "[grow]", "[][grow]"));

在这一行中,我们指定第一列和第二行 网格增长。

pnl.add(field, "growx");
pnl.add(new JScrollPane(area), "grow");

现在我们定义文本字段水平填充其分配的区域,同时 文本区域填充整个分配的区域。

MigLayout grow

Push

The push约束本质上与(列,行)相同grow。这 区别在于push指定于add() method.

package com.zetcode;

import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import net.miginfocom.swing.MigLayout;


public class MigLayoutPushEx extends JFrame {

    public MigLayoutPushEx() {

        initUI();

        setSize(300, 250);
        setTitle("Push constraint");
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
    }

    private void initUI() {

        JPanel pnl = new JPanel(new MigLayout("wrap"));

        JTextField field = new JTextField(10);
        JTextArea area = new JTextArea(10, 10);        

        pnl.add(field, "pushx, growx");
        pnl.add(new JScrollPane(area), "push, grow");

        add(pnl);
    }

    public static void main(String[] args) {

        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                MigLayoutPushEx ex = new MigLayoutPushEx();
                ex.setVisible(true);
            }
        });
    }
}

该示例与上一个示例相同。

JPanel pnl = new JPanel(new MigLayout("wrap"));

这里没有指定生长。

pnl.add(field, "pushx, growx");
pnl.add(new JScrollPane(area), "push, grow");

一切都是使用组件的约束来指定的add()方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MigLayout 推送 VS 增长 的相关文章

随机推荐