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标签水平填充其分配区域,其他两个标签填充两个维度的分区区域.

列,行增长
(列,行)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)
现在我们定义文本字段水平填充其调整区域,而文本区域填充整个调整区域.

推
所述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()
.