这两个约束之间有什么区别?
从文档中:
PUSH -使组件所在的行和/或列以“weight”增长
GROW -设置组件相对于同一单元格中其他组件的增长敏锐度。
因此,主要思想是缩小组件内部和外部的尺寸?
最佳答案
重要的是要了解fill
,(列,行)grow
,push
一起工作
使用(component)grow
定义布局。 (有两种不同的grow
约束可以做不同的事情。)MigLayout
是基于网格的管理器。 (更确切地说,其最重要的模式是。)
需要完成两个步骤:
这就是
fill
,(列,行)grow
,push
和(组件)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/