MigLayout推动VS增长
这两个约束有什么区别?
从文档:
PUSH – 使组件所在的行和/或列以“重量”增长
GROW – 设置组件相对于同一单元中的其他组件的增长程度。
那么,主要的想法是缩小组件内外的大小?
重要的是要理解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); } }); } }
在示例中,我们有三个标签。
JPanel pnl = new JPanel(new MigLayout("fill"));
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标签水平填充其分配区域,其他两个标签填充两个维度的分区区域。
列,行增长
(列,行) 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");
现在我们定义文本字段水平填充其分配区域,而文本区域填充整个分区。
推
push
约束与(列,行) 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); } }); } }
该示例与前一个示例相同。
JPanel pnl = new JPanel(new MigLayout("wrap"));
这里没有指定增长。
pnl.add(field, "pushx, growx"); pnl.add(new JScrollPane(area), "push, grow");
使用add()
方法中的组件约束来指定所有内容。