MigLayout和垂直居中的组件

时间:2014-04-29 12:26:59

标签: java swing layout vertical-alignment miglayout

我想按下如下所示的按钮:

expected result

这是我的代码:

import java.awt.Dimension;
import javax.swing.*;
import net.miginfocom.swing.MigLayout;

public class MigLayoutTest extends JFrame {

    public static void main(String[] args) {

        JPanel content = new JPanel();
        content.setLayout(new MigLayout("center, wrap, gapy 20"));

        JButton buttonA = new JButton("button A");
        buttonA.setPreferredSize(new Dimension(100,30));
        JButton buttonB = new JButton("button B");
        buttonB.setPreferredSize(new Dimension(80,80));
        JButton buttonC = new JButton("button C");
        buttonC.setPreferredSize(new Dimension(300,40));
        JButton buttonD = new JButton("button D");
        buttonD.setPreferredSize(new Dimension(200,60));

        content.add(buttonA);
        content.add(buttonB);
        content.add(buttonC);
        content.add(buttonD);

        JFrame frame = new JFrame("MigLayout Test");
        frame.setContentPane(content);
        frame.setSize(600, 400);
        frame.setVisible(true);
    }

}

按钮居中,但不是垂直。

有什么建议吗?提前谢谢。

1 个答案:

答案 0 :(得分:5)

白皮书定义了确切的语法:

  

al / align alignx [aligny]

继续:

  

可以将对齐指定为UnitValue或AlignKeyword。

因此,要使整个块沿两个轴居中,使用AlignKeyword需要两个参数:

new MigLayout("al center center, wrap, gapy 20"); // centers in both directions

下一句:

  

如果使用了AlignKeyword,则"对齐"关键字可以省略。

这将是:

new MigLayout("center center, wrap, gapy 20"); // centers horizontally only

虽然不起作用,但在解析参数时看起来有点小故障。