【问题标题】:MigLayout JLabel exceeds constraintsMigLayout JLabel 超出约束
【发布时间】:2014-01-08 19:39:04
【问题描述】:

我正在通过以下方式使用 MigLayout

    panel.setLayout(new MigLayout("",
            "[][600!][]",
            "[][][][][][][][][]"));
    panel.add(composerTitle);
    panel.add(composerText, "wmax 600");
    panel.add(lblCount, "push, align right, wrap");
    panel.add(costTitle);
    panel.add(costText, "wrap,wmax 600");
    panel.add(titleTitle);
    panel.add(titleText, "wrap,wmax 600");
    panel.add(publisherTitle);
    panel.add(publisherText, "wrap,wmax 600");
    panel.add(scoreinfoTitle);
    panel.add(scoreinfoText, "wrap,wmax 600");
    panel.add(languageTitle);
    panel.add(languageText, "wrap,wmax 600");
    panel.add(collectionTitle);
    panel.add(collectionText, "wrap,wmax 600");
    panel.add(numbersTitle);
    panel.add(numbers, "grow, span 2, wrap");//JTextArea that uses line wrap
    panel.add(contentTitle);
    panel.add(content, "grow, span 2, wrap");//JTextArea

有时我的标签可能会超过 600 个!我为列添加的约束。因此,我希望标签永远不会超过 600,因为最大值设置为 600。但是,如果标签有足够的文本,它就会这样做。因此,我必须将约束添加到每个“wmax 600”。没有这个限制,我的标签就会跑出框架。

有没有办法做到这一点,所以我不必在我添加的每个标签中添加“wmax 600”。这似乎违背了600的目的!列的约束。

【问题讨论】:

    标签: java swing layout-manager miglayout


    【解决方案1】:

    MigLayout 的基本特征:

    • cell-size != component-size:行/列约束只影响前者
    • 它始终遵循组件的最小/首选项/最大值,除非在 ComponentConstraint 中被覆盖

    那些与 minSize 仅略小于其 prefSize 的标签相结合会导致那些超出(又名:> 比单元格宽度)组件大小。为了至少将组件约束与列约束解耦(即,当后者发生变化时不必改变所有前者),您可以使用 wmin:

    JPanel panel = new JPanel();
    panel.setLayout(new MigLayout("wrap 3, debug",
            "[][300!][]"));
    panel.add(new JLabel("first, normal: "));
    panel.add(new JLabel("and here we want something reaaly long" 
            + "and here we want something reaaly long")
              , "wmin 0"
            );
    panel.add(new JLabel("10"));
    panel.add(new JLabel("second: "));
    panel.add(new JLabel("another"));
    

    或者(如果您的应用程序中有许多这样的布局),继承 JLabel 并覆盖 getMinPreferredSize 以返回 (0, minHeight)。有点脏,但可以说对于 JLabel 并没有多大意义:毕竟默认情况下,它已经可以通过显示省略号来处理它,您可以进一步增强子类以显示带有完整文本的工具提示。

    【讨论】:

    • 你解决了我的问题! MigLayout 给了我一个很棒的初始布局,但是我会更改 JLabel 的文本,整个布局就会跳来跳去。我正在寻找一种方法来阻止 JLabels 动态增长,wmin 0 是我需要的魔法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-04
    • 2014-11-02
    • 1970-01-01
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多