【发布时间】:2014-09-20 12:22:35
【问题描述】:
这两个约束有什么区别?
来自文档:
PUSH - 使组件所在的行和/或列随着“权重”增长
GROW - 设置组件相对于同一单元格中的其他组件的增长速度。
那么,主要思路是缩小组件内外尺寸?
【问题讨论】:
标签: java swing layout miglayout
这两个约束有什么区别?
来自文档:
PUSH - 使组件所在的行和/或列随着“权重”增长
GROW - 设置组件相对于同一单元格中的其他组件的增长速度。
那么,主要思路是缩小组件内外尺寸?
【问题讨论】:
标签: java swing layout miglayout
了解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");
现在我们定义文本字段水平填充其分配区域,同时 文本区域填满了整个 alotted 区域。
推送
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() 中的组件约束指定所有内容
方法。
【讨论】:
push 不仅适用于差距。 Quick Start 没有提到 push 可以在组件中使用,但 DOC 可以。不知何故,我仍然不清楚....无论如何,谢谢。