这两个约束之间有什么区别?

从文档中:

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

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

因此,主要思想是缩小组件内部和外部的尺寸?

最佳答案

重要的是要了解fill,(列,行)growpush一起工作
使用(component)grow定义布局。 (有两种不同的grow约束可以做不同的事情。)
MigLayout是基于网格的管理器。 (更确切地说,其最重要的模式是。)
需要完成两个步骤:

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

  • 这就是fill,(列,行)growpush和(组件)grow的约束
    帮助实现。前三个定义了网格的列和行的增长,
    最后一个定义了组件如何在其范围内扩展
    占用面积,例如放置它的单元格。请注意,填充或增长是占据的趋势或渴望
    布局中的空白空间。列,行或行未占用的窗口区域
    组件充满了空白空间。
    push和(列,行)grow采用可选的weight参数。它
    定义列或行相对于其他列的增长速度
    和行。 fill约束条件均匀分布weight

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

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

    填写
    fill约束影响网格的所有单元。它们占据了所有可用空间。
    (component)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()中的组件约束来指定
    方法。

    关于java - MigLayout推VS成长,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25010068/

    10-10 11:21