Вертикально центрировать контент с BoxLayout - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь центрировать содержимое JPanel с BoxLayout по вертикали. BoxLayout выровнен по оси Y, поэтому элементы внутри выровнены по горизонтали.

Например, то, что у меня сейчас есть:

-----------------------------
|          ------           |
|        ----------         |
|           ----            |
|      --------------       |
|                           |
|                           |
|                           |
|                           |
|                           |
|                           |
-----------------------------

Что я хочу:

-----------------------------
|                           |
|                           |
|                           |
|          ------           |
|        ----------         |
|           ----            |
|      --------------       |
|                           |
|                           |
|                           |
-----------------------------

В данный момент я центрирую столбец элементов, используя setAlignmentX (Component.CENTER_ALIGNMENT):

JPanel box = new JPanel();
box.setLayout(new BoxLayout(box, BoxLayout.Y_AXIS));
JLabel one = new JLabel("First element");
one.setAlignmentX(JLabel.CENTER_ALIGNMENT);
box.add(one);
JLabel two = new JLabel("Second element");
two.setAlignmentX(JLabel.CENTER_ALIGNMENT);
box.add(two);
...

Как я могу изменить это, чтобы он также был вертикально центрирован?

1 Ответ

2 голосов
/ 27 февраля 2020

Макет BoxLayout позволяет компонентам увеличиваться (до максимального размера), когда доступно дополнительное пространство.

Вам необходимо добавить компоненты, которым разрешен рост. Код basi c будет выглядеть следующим образом:

box.add( Box.createVerticalGlue() );
box.add(...);
box.add( Box.createVerticalGlue() );

Два «склеенных» компонента сверху / снизу увеличатся, чтобы заполнить доступное пространство.

...