Центрирование JButton в BoxLayout, заполнение JTextField

Я создал простой JDialog для получения исходных данных для моего приложения. Элементы (JLabel, JTextField и JButton) расположены по BoxLayout внутри BorderLayout. (Код в конце). Пока это выглядит так:

Текущее расположение

У меня две проблемы:

  1. Я хотел бы центрировать JButton в этом ряду. Я пробовал startBtn.setAlignmentX(Component.CENTER_ALIGNMENT);, но он не работает должным образом, появляется каша.

  2. Я хочу добавить левый/правый отступ к TextField. Первое решение из этой темы работает нормально, но другие элементы перемещаются правильно левое значение заполнения.

Кто-нибудь может подсказать как поставить? Я новичок в Java и понятия не имею.

Вот код моего класса InitDialog:

public class InitDialog extends JDialog {

    JTextField dataTF;
    JButton startBtn;

    public InitDialog(JFrame owner) {

        super(owner, "Rozpocznij test", Dialog.ModalityType.DOCUMENT_MODAL);
        initUI();

    }

    public final void initUI() {

        System.out.println("InitDialog::initUI");

        JPanel outer = new JPanel(new BorderLayout());
        JPanel inner = new JPanel();

        outer.setBorder(new EmptyBorder(new Insets(20, 20, 20, 20)));

        JLabel msg = new JLabel("<html>Podaj ilości liczb w zestawach testowych<br />(przedzielone średnikiem):");
        inner.add(msg);
        inner.add(Box.createVerticalStrut(15));

        dataTF = new JTextField();
        dataTF.setBorder(null);
        dataTF.setText("50; 100; 200");
        inner.add(dataTF);
        inner.add(Box.createVerticalStrut(15));

        startBtn = new JButton("Rozpocznij test");
        inner.add(startBtn);

        inner.setLayout(new BoxLayout(inner, BoxLayout.Y_AXIS));
        outer.add(inner);
        add(outer);

        setSize(300, 180);

        //setDefaultCloseOperation(DISPOSE_ON_CLOSE);

        addWindowListener(new WindowAdapter() {
            @Override public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });

        setResizable(false);
        setLocationRelativeTo(getRootPane());

    }

}

person Krzysztof Antoniak    schedule 06.01.2013    source источник
comment
На ваш 1-й вопрос вы пробовали inner.add(startBtn,BorderLayout.CENTER);   -  person exexzian    schedule 06.01.2013
comment
Тогда разницы в раскладке нет. Спасибо за интерес.   -  person Krzysztof Antoniak    schedule 06.01.2013


Ответы (1)


Выравнивание BoxLayout — это не то, что вы думаете.

Чтобы получить то, что вы хотите, это линия, которая вам нужна

msg.setAlignmentX(Component.CENTER_ALIGNMENT);
person Michael Dunn    schedule 06.01.2013