如何使BoxLayout中的垂直间隙变小?

时间:2013-02-01 18:19:27

标签: java swing user-interface layout-manager boxlayout

我有以下表单,它使用垂直BoxLayout和FlowLayout JPanels作为行:

enter image description here

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

3 个答案:

答案 0 :(得分:11)

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

另一种解决方案是在将组件添加到面板后确定每个面板的最大大小:

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

答案 1 :(得分:5)

您可以使用胶水(不可见组件)填充可用空间。见doc

您也可以使用VerticalLayout代替框布局。不幸的是,它在swing api中不存在,但是有很多免费实现这种布局。

例如:http://www.java2s.com/Code/Java/Swing-JFC/AverticallayoutmanagersimilartojavaawtFlowLayout.htm

答案 2 :(得分:3)

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

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

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