2016-04-25 3 views
2

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

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

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

enter image description here

Но если завернуть его в 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); 

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

enter image description here

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

ответ

7

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

исчезают

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

не Может кто-то объяснить это?

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

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

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

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

 Смежные вопросы

  • Нет связанных вопросов^_^