3

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

在此处输入图像描述

我怎样才能使每行之间的巨大差距变小?这是我的代码:

4

3 回答 3

13

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

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

pnlName.setMaximumSize( pnlName.getPreferredSize() );
pnlSurname.setMaximumSize( pnlSurname.getPreferredSize() );
pnlAge.setMaximumSize( pnlAge.getPreferredSize() );
于 2013-02-01T19:09:09.157 回答
5

您可以使用胶水(不可见组件)来填充可用空间。请参阅此文档

除了盒子布局,您还可以使用 VerticalLayout。不幸的是,swing api 中不存在这种布局,但是有很多免费的实现这样的布局可用。

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

于 2013-02-01T18:28:05.807 回答
4

你需要的是贪婪的胶水。除非胶水是贪婪的,否则它和它的兄弟姐妹都会收到任何额外空间的一部分。胶水是一个 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());

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

于 2014-09-14T14:47:47.867 回答