我有以下表格,它使用垂直 BoxLayout 和 FlowLayout JPanels 作为行:
我怎样才能使每行之间的巨大差距变小?这是我的代码:
我有以下表格,它使用垂直 BoxLayout 和 FlowLayout JPanels 作为行:
我怎样才能使每行之间的巨大差距变小?这是我的代码:
问题是 BoxLayout 尊重组件的最大尺寸。由于面板没有最大尺寸,因此每个面板都会增加高度以占用可用空间。
另一种解决方案是在将组件添加到面板后确定每个面板的最大尺寸:
pnlName.setMaximumSize( pnlName.getPreferredSize() );
pnlSurname.setMaximumSize( pnlSurname.getPreferredSize() );
pnlAge.setMaximumSize( pnlAge.getPreferredSize() );
您可以使用胶水(不可见组件)来填充可用空间。请参阅此文档
除了盒子布局,您还可以使用 VerticalLayout。不幸的是,swing api 中不存在这种布局,但是有很多免费的实现这样的布局可用。
例如:http ://www.java2s.com/Code/Java/Swing-JFC/AverticallayoutmanagersimilartojavaawtFlowLayout.htm
你需要的是贪婪的胶水。除非胶水是贪婪的,否则它和它的兄弟姐妹都会收到任何额外空间的一部分。胶水是一个 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());
将此胶水元素添加为外盒中的最后一项。