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

2 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"));
Run Code Online (Sandbox Code Playgroud)

它工作得很好.按钮位于左侧和右侧

在此输入图像描述

但如果我把它包装成JPanelFlowLayout胶水管理消失.

//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);
Run Code Online (Sandbox Code Playgroud)

为什么?我认为胶水就像任何其他组件一样,所以它不应该消失.这是它的样子:

在此输入图像描述

不能有人解释一下吗?需要注意的是,如果我把它变成一个JPanelBoxLayout它的罚款.

cam*_*ckr 7

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

"胶水"的首选大小为0.

不能有人解释一下吗?

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

使用a的面板的优选尺寸BoxLayout是添加到面板的组件的尺寸.由于胶的优选尺寸为0,因此它对面板的优选尺寸没有影响.

"胶水"只是为使用它的面板增加了功能BoxLayout.也就是说,当面板尺寸(由父面板的布局管理器确定)大于优选尺寸时,BoxLayout将为胶水提供额外的空间.

因此,根据父面板的布局管理器,"胶水"将会或不会影响布局.