MigLayout推动VS增长

这两个约束有什么区别?

从文档:

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

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

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

重要的是要理解fill ,(列,行) growpush工作与(组件)一起grow以定义布局。 (有两种不同的grow约束可以做不同的事情。)

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

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

这就是fill ,(列,行) growpush和(组件) 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标签水平填充其分配区域,其他两个标签填充两个维度的分区区域。

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); } }); } } 

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

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

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

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

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

MigLayout成长

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()方法中的组件约束来指定所有内容。