Java 如何缩小BoxLayout中的垂直间隙?

Java 如何缩小BoxLayout中的垂直间隙?,java,swing,user-interface,layout-manager,boxlayout,Java,Swing,User Interface,Layout Manager,Boxlayout,我得到了以下表单,它对行使用了垂直BoxLayout和FlowLayout JPanels: 如何缩小每行之间的巨大差距?这是我的代码:您可以使用胶水(不可见组件)来填充可用空间。看到这个了吗 也可以使用垂直布局代替长方体布局。不幸的是,它不存在于SwingAPI中,但是有很多这样的布局的免费实现 例如:问题在于BoxLayout尊重组件的最大尺寸。由于面板没有最大尺寸,每个面板都会增加高度以占用可用空间 另一种解决方案是在将构件添加到配电盘后确定每个配电盘的最大尺寸: pnlName.set

我得到了以下表单,它对行使用了垂直BoxLayout和FlowLayout JPanels:

如何缩小每行之间的巨大差距?这是我的代码:

您可以使用胶水(不可见组件)来填充可用空间。看到这个了吗

也可以使用垂直布局代替长方体布局。不幸的是,它不存在于SwingAPI中,但是有很多这样的布局的免费实现


例如:

问题在于BoxLayout尊重组件的最大尺寸。由于面板没有最大尺寸,每个面板都会增加高度以占用可用空间

另一种解决方案是在将构件添加到配电盘后确定每个配电盘的最大尺寸:

pnlName.setMaximumSize( pnlName.getPreferredSize() );
pnlSurname.setMaximumSize( pnlSurname.getPreferredSize() );
pnlAge.setMaximumSize( pnlAge.getPreferredSize() );

你需要的是贪婪的胶水。除非胶水是贪婪的,否则它和它的兄弟姐妹都会得到额外空间的一部分。胶水是一个Box.Filler对象,它有一个方法changeShape来重置其大小约束。要使其贪婪,请将首选大小设置为Integer.MAX_值:

    Box.Filler glue = Box.createVerticalGlue();
    glue.changeShape(glue.getMinimumSize(), 
                    new Dimension(0, Short.MAX_VALUE), // make glue greedy
                    glue.getMaximumSize());

将此粘合元素添加为外框中的最后一项。

要更快获得更好的帮助,请提供一条建议。不要使用setPreferredSize()。这只是对抗Swing,而不是使用Swing。我必须在第一行中转换到
Box.Filler
Box.Filler glue=(Box.Filler)Box.createVerticalGlue()