java - 如何消除 MigLayout 中两个单元格之间的垂直间隙?

标签 java swing layout miglayout gaps-in-visuals

非常简单的问题:如何去除包含两个 JCheckBox 的两个单元格之间的垂直间隙?我用红色边框标记了图片中的间隙。

gap

代码如下:

import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

import net.miginfocom.swing.MigLayout;

public class Main {
    public static void main(String[] args) {
        JPanel somePanel = new JPanel();
        somePanel.setLayout(new MigLayout("insets 0, debug", "", ""));
        somePanel.add(new JCheckBox("first option"), "h 20!");
        somePanel.add(new JButton("click me"), "spany 2, h 40!, w 60%, wrap");
        somePanel.add(new JCheckBox("option two"), "h 20!");

        JFrame frame = new JFrame();
        frame.setContentPane(somePanel);
        frame.pack();
        frame.setVisible(true);
    }
}

最佳答案

如果最小间隙应仅应用于特定的行/列之间,则在行/列约束中定义:

new MigLayout("insets 0, debug", "", "[]0[]"));

(想知道这对你不起作用吗?这里没问题:)

或者在 layoutContraints 中,如果它们应该应用在所有行之间:

new MigLayout("insets 0, gapy 0, debug"));

顺便说一句:布局“编码”应该遵循与所有编码相同的规则,f.i. DRY :-) 特别是,如果您可以通过布局/行约束实现目标,我的规则是不要重复组件约束。在示例中,您可以通过以下方式摆脱除跨越之外的所有组件约束:

somePanel.setLayout(new MigLayout("insets 0, debug, wrap 2", 
        "[][60%, fill]", "[20!, fill]0"));
somePanel.add(new JCheckBox("first option"));
somePanel.add(new JButton("click me"), "spany 2");
somePanel.add(new JCheckBox("option two"));

关于java - 如何消除 MigLayout 中两个单元格之间的垂直间隙?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13125789/

相关文章:

java.awt.Color 创建后更改 RGB 颜色

java - 从字符串创建 Swing 组件

ios - 在 IB 中的 GLKViewController 中的 Xcode 5 中,顶部/底部布局指南的用途是什么?

css - 聊天应用程序的简单 CSS 布局

java - 有关执行操作和使用具有多个 View 的单个模型的不确定性

android - 纵向模式和横向模态视图显示调整与手机大小

java - Redis 缓存 Map<Integer, String>

java - 使用 JSoup 设置 HTML 标签的属性

java - 如何从一个 Activity 访问一个方法并将其用于 Android 中的另一个 Activity?

java - 子类调用父类的方法