我有以下表单,它使用垂直BoxLayout和FlowLayout JPanels作为行:
如何使每行之间的巨大差距缩小?这是我的代码:
答案 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());
将此胶水元素添加为外框中的最后一项。