gpt4 book ai didi

java - MigLayout 推送 VS 增长

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:04:52 27 4
gpt4 key购买 nike

这两个约束有什么区别?

来自文档:

PUSH - 使组件所在的行和/或列随“权重”增长

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

那么,主要思想是缩小组件内外的尺寸?

最佳答案

了解 fill, (column, row) grow, push 协同工作很重要使用 (component) grow 来定义布局。 (有两种不同的 grow 约束可以做不同的事情。)

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

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

这就是fill, (column, row) grow, push 和 (component) grow 约束帮助实现。前三个定义网格的列和行的增长,最后一个定义了组件将如何分布在它的分配区域,例如它所在的单元格。请注意,填充或增长是占据的趋势或渴望布局中的空白空间。未被列、行或components 充满了空白。

push 和 (column, row) grow 采用可选的 weight 参数。它定义列或行相对于其他列的增长程度和行。 fill 约束均匀分布权重

(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");

现在我们定义组件如何填充由布局管理器。Area 1 标签水平填充其分配的区域,另一个两个标签填充两个维度的分配区域。

MigLayou fill

列、行增长

(column, row) 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 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com