MigLayout推动VS增长

Vla*_*aly 7 java layout swing miglayout

这两个约束有什么区别?

来自文档:

PUSH - 使组件所在的行和/或列以"重量"增长

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

那么,主要思想是缩小组件内外的大小?

Jan*_*nar 19

理解这一点很重要fill,(列,行)grow,push在与所述(组件)相结合工作grow来定义布局.(有两种不同的grow约束可以做不同的事情.)

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

  • 定义网格的列和行占用多少空间
  • 定义在他们的细胞中占据多少空间成分

这是什么fill,(列,行)grow,push和(组件)grow的限制有助于实现.前三个定义了网格的列和行的增长,最后一个定义了组件如何在其分配的区域上扩散,例如它所放置的单元格.注意填充或增长是趋势或渴望占据布局中的空白空间.未被列,行或组件占用的窗口区域填充空白空间.

push与(列,行)grow取可选weight参数.它定义了列或行相对于其他列和行的增长程度.该fill约束分配weight均匀.

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

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

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);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

在示例中,我们有三个标签.

JPanel pnl = new JPanel(new MigLayout("fill"));
Run Code Online (Sandbox Code Playgroud)

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");
Run Code Online (Sandbox Code Playgroud)

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

MigLayou填写

列,行增长

(列,行)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);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

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

JPanel pnl = new JPanel(new MigLayout("wrap", "[grow]", "[][grow]"));
Run Code Online (Sandbox Code Playgroud)

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

pnl.add(field, "growx");
pnl.add(new JScrollPane(area), "grow");
Run Code Online (Sandbox Code Playgroud)

现在我们定义文本字段水平填充其调整区域,而文本区域填充整个调整区域.

MigLayout成长

所述push约束是esentially一样的(行,列)grow.区别在于push方法中指定的区别add().

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);
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

该示例与前一个示例相同.

JPanel pnl = new JPanel(new MigLayout("wrap"));
Run Code Online (Sandbox Code Playgroud)

这里没有指定增长.

pnl.add(field, "pushx, growx");
pnl.add(new JScrollPane(area), "push, grow");
Run Code Online (Sandbox Code Playgroud)

使用方法中的组件约束来指定所有内容add() .