当我用另一个面板包裹Panel时,为什么胶水会消失?

时间:2016-04-25 16:44:15

标签: java swing layout-manager boxlayout

这是我试过的:

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,那就没问题了。

1 个答案:

答案 0 :(得分:7)

  

为什么呢?我认为胶水就像任何其他组件一样,所以它不应该消失

"胶水"首选大小为0.

  

有人可以解释一下吗?

FlowLayout以首选尺寸显示组件。因此添加到其中的任何面板都将显示在面板首选尺寸上。

使用BoxLayout的面板的首选大小是添加到面板的组件的大小。由于胶水的首选尺寸为0,因此对面板的首选尺寸没有影响。

"胶水"只是使用BoxLayout为面板添加了附加功能。也就是说,当面板大小(由父面板的布局管理器确定)大于首选大小时,BoxLayout将为胶水提供额外的空间。

因此,取决于父面板的布局管理器,"胶水"是否会影响布局。