java - Swing MigLayout - 无法避免不必要的间隙

标签 java swing layout-manager miglayout

我正在使用 MigLayout 编写一些用于测量目的的 Swing 应用程序。我正在努力消除不必要的差距。

我已经注意到由于顶部的句子而存在间隙。然而,当我删除它时,它看起来很好。

该问题在下图中可见:

enter image description here

我添加句子的方式是:

add(text, "wrap, center, gap top 20");

以及我添加按钮的方式:

String wrap = shouldWrap(i) ? "wrap" : "";
this.add(button, "gapbefore 15, width 50, height 20, " + wrap);

任何人都可以帮我解释为什么会发生这种情况以及如何消除与当前句子之间的差距吗?

////////////编辑

我想使用我当前的基础设施,我在 MigLayout 中启用了 Debug模式,我看到了类似这样的内容:

My JPanel in debug mode looks like this

我想知道为什么行中每个第一个组件周围的边框大小设置为与“请指定您对给定陈述的同意程度”句子的大小相匹配。

有没有办法使用MigLayout为每个组件禁用该选项?

最佳答案

您只需使用约束“split x”,它将行分成挤在一起的 X 个部分:

不拆分:

public class SentenceExample {

    public static void main(String[] args) {
        JFrame frame = new JFrame("JFrame Example");
        JPanel panel = new JPanel();

        panel.setLayout(new MigLayout());

        panel.add(new JLabel("Please, specify how much you agree with the given statements"), "wrap");

        panel.add(new JButton("1"));
        panel.add(new JButton("2"));
        panel.add(new JButton("3"));
        panel.add(new JButton("4"));
        panel.add(new JButton("5"));
        panel.add(new JButton("6"));
        panel.add(new JButton("7"));
        panel.add(new JButton("8"));
        panel.add(new JButton("9"));
        panel.add(new JButton("10"));

        frame.add(panel);
        frame.setSize(900, 300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

看起来像这样:

WithoutSplit

拆分:

如果您更改第一个 JButton 行:

panel.add(new JButton("1"));

对此:

panel.add(new JButton("1"), "split 10");

您的 GUI 将如下所示:

WithSplit

第一个带有“split 10”约束的按钮安排了 10 个“槽”,按钮本身和接下来的 9 个元素将被放入其中。

对每行中的第一个按钮(即带有循环)执行此操作,您将获得所需的外观。

<小时/>

编辑: 如果对每个第一个按钮使用循环太麻烦,您可以对面板布局本身使用列约束,使其具有 7 列,并使句子跨越几列。看到这里http://www.miglayout.com/QuickStart.pdf了解如何创建列约束。

“split”可能更容易使用,但列约束可能更清晰。

关于java - Swing MigLayout - 无法避免不必要的间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40251297/

相关文章:

java - 如何在 Gradle 构建中为测试范围映射器接口(interface)生成 Mapstruct 映射器实现?

java - 这段代码中哪个线程正在 hibernate ?主线程还是 t1 线程?

java - 从子类获取父类

Java 更改 GridLayout 内的 JTextField 大小

Java-Swing : A problem using layout managers!

java - 删除 GridBagLayout 中按钮周围的空间

java - Android HttpsUrlConnection 验证 SSL

JAVA 贪吃蛇游戏错误。蛇走了3步就停了下来

java - 直接绘制到面板中的 JButton 不显示带有 WindowsLookAndFeel 的背景

java - 更改内容后刷新 Box 的内容