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

Java 为什么当我用另一个面板包裹面板时,胶水会消失?,java,swing,layout-manager,boxlayout,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")); 它工作得很好。按钮在左右两侧 但是如果我将它包装到由FlowLayout管理的JPanel中,胶水就会消失

以下是我尝试过的:

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"));
它工作得很好。按钮在左右两侧

但是如果我将它包装到由
FlowLayout
管理的
JPanel
中,胶水就会消失

//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);
为什么??我认为胶水和其他任何组件一样,所以它不应该消失。这就是它的样子:

有人解释一下吗?请注意,如果我将它放入带有
BoxLayout
JPanel
,就可以了

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

“胶水”的首选大小为0

有人解释一下吗

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

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

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

因此,根据父面板的布局管理器,“粘合”将影响或不会影响布局