Почему клей исчезает, когда я оборачиваю панель другой?

Вот что я пробовал:

JPanel p1 = new JPanel();
BoxLayout b1 = new BoxLayout(p1, BoxLayout.X_AXIS);
p1.setLayout(b1);
p1.add(new JButton("1"));
p1.add(Box.createHorizontalGlue());
p1.add(new JButton("1"));

И это работает очень хорошо. Кнопки находятся слева и справа

введите здесь описание изображения

Но если я оберну его в JPanel под управлением FlowLayout, клей исчезнет.

//Flow Layout
JPanel jp = new JPanel();

//Box Layout
JPanel p1 = new JPanel();
BoxLayout b1 = new BoxLayout(p1, BoxLayout.X_AXIS);
p1.setLayout(b1);
p1.add(new JButton("1"));
p1.add(Box.createHorizontalGlue());
p1.add(new JButton("1"));

//put it into a JPanel with FlowLayout
jp.add(p1);
panel.add(jp);

Почему? Я думал, что клей такой же, как и любые другие компоненты, поэтому он не должен исчезать. Вот как это выглядит:

введите здесь описание изображения

Кто-нибудь не может объяснить? Обратите внимание, что если я поставлю его в JPanel с BoxLayout, все будет в порядке.


person Community    schedule 25.04.2016    source источник


Ответы (1)


Почему? Я думал, что клей такой же, как и любые другие компоненты, поэтому он не должен исчезать.

«клей» имеет предпочтительный размер 0.

Кто-нибудь не может объяснить?

FlowLayout отображает компоненты в их предпочтительном размере. Таким образом, любая добавленная к нему панель будет отображаться с предпочтительным размером панели.

Предпочтительный размер панели с использованием BoxLayout — это размер компонентов, добавленных к панели. Поскольку предпочтительный размер клея равен 0, он не влияет на предпочтительный размер панели.

«Клей» просто добавляет функциональности панели с помощью BoxLayout. То есть, когда размер панели (определенный менеджером компоновки родительской панели) больше предпочтительного размера, BoxLayout даст дополнительное пространство для клея.

Таким образом, в зависимости от менеджера компоновки родительской панели «клей» повлияет или не повлияет на компоновку.

person camickr    schedule 25.04.2016