咄咄逼人和spany陷入困境布局

时间:2014-05-30 00:24:24

标签: java miglayout

为什么垂直跨越两行的Label超出其单元格边界?

可编辑的代码:

public class MigLayoutTests {

    public static void main(String[] args) {

        JFrame frame = new JFrame();
        frame.setSize(500, 500);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setLocationRelativeTo(null);

        JPanel mainPanel = new JPanel(new MigLayout("wrap 2, debug, fill", "", ""));

        JPanel greyPanel = new JPanel();
        greyPanel.setBackground(Color.GRAY);

        mainPanel.add(new JLabel("<html>text<br>over<br>two<br>rows</html>"), "spany 2");
        mainPanel.add(new JLabel("First row"), "");
        mainPanel.add(new JLabel("Second row"), "");
        mainPanel.add(greyPanel, "spanx 2, pushy, grow");


        frame.setContentPane(mainPanel);
        frame.setVisible(true);

    }

}

这是一张图片:

Label exceeds its borders


我知道我可以使用行约束并设置前两行不增长和第三行增长。在交换了代码行并按照我的意愿行事之后,我不知道会有多少行,因为它们是动态创建的。

JPanel mainPanel = new JPanel(new MigLayout("wrap 2, debug, fill", "", "[][][fill, grow]"));
(...)
mainPanel.add(greyPanel, "spanx 2, grow");

此外,如果我不让第一个标签跨越两行,那么pushy就会起作用 spanx / pushx的类似问题。

2 个答案:

答案 0 :(得分:1)

看起来它一定是MigLayout处理单元格大小的错误。您可以做的一件事是将标签放在一个单独的面板中:

JPanel mainPanel = new JPanel(new MigLayout("debug"));

JPanel greyPanel = new JPanel();
greyPanel.setBackground(Color.GRAY);
JPanel labelPanel = new JPanel(new MigLayout("ins 0, debug"));
labelPanel.add(new JLabel("<html>text<br>over<br>two<br>rows</html>"),
                          "pushx, spany");
labelPanel.add(new JLabel("First row"), "pushx, span");
labelPanel.add(new JLabel("Second row"), "pushx, span");
mainPanel.add(labelPanel, "pushx, growx, span");
mainPanel.add(greyPanel, "span, push, grow");

这看起来与具有行约束的解决方案相同,并且可以通过添加更多面板来添加额外的组件行。

答案 1 :(得分:0)

这是一个错误,已经报告给MigLayout。