MigLayout и вертикально центрированные компоненты

Я хочу центрировать кнопки, как показано ниже:

ожидаемый результат

Вот мой код:

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);
    }

}

Кнопки расположены по центру, но не вертикально.

Какие-либо предложения? Заранее спасибо.


person hold3n    schedule 29.04.2014    source источник


Ответы (1)


Технический документ определяет точный синтаксис:

al/align alignx [выравнивание]

Продолжаем с:

Выравнивание можно указать как UnitValue или AlignKeyword.

Итак, для центрирования всего блока по обеим осям с помощью AlignKeyword нужны два параметра:

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

Следующее предложение:

Если используется AlignKeyword, ключевое слово «align» можно опустить.

Что было бы:

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

не работает, похоже, небольшой сбой при анализе параметров.

person kleopatra    schedule 29.04.2014
comment
@MikaelGrev убить тебя было бы контрпродуктивно — тогда ты не мог бы это исправить ‹усмехается› - person kleopatra; 29.04.2014
comment
@kleopatra Большое спасибо! - person hold3n; 30.04.2014
comment
@MikaelGrev MigLayout rlz: D - person hold3n; 30.04.2014
comment
@kleopatra Еще один вопрос. Мне нужно установить вставки и центрировать все компоненты по вертикали. Я пробовал так: content.setLayout(new MigLayout("debug, insets 20 40 n 40, aligny center, fillx")); content.add(new JTextArea("Lorem ipsum dolor sit amet\n consectetur ..."), "grow, wrap"); content.add(new JButton("button A"), "grow"); К сожалению, верхняя вставка игнорируется, предположительно из-за вертикального выравнивания. Вопрос в том, можно ли центрировать компоненты, если вставки «разрешают» это? - person hold3n; 03.05.2014