0

我有一套JPanelGridBagLayout它有 2 列和 1 行(2 个单元格)。每个单元格都包含一个单元格JPanel,其中包含一个单元格JLabel(组件的类型无关紧要)。

左侧单元格JLabel中的宽度属性设置为 100px。JLabel右侧单元格中的宽度属性设置为 50px 。在这种情况下,左侧单元格会稍微延伸一点,并且比右侧单元格更宽。

我认为GridBagLayout只有在包含的组件占用太多空间时才会扩展单元格。这是一个GBL错误吗?

知道如何解决这个问题吗?

4

2 回答 2

1

恐怕这是一个很难回答的问题,因为GridBagLayout它的列和行不是这样排列的。如果您有两列和两个组件,则这些列的大小将与放入这些列的最大组件的大小相同。所以你的左列更大,因为你的左组件更大。

GridBagConstraints您可以通过调整组件的相应属性来调整单元格占用多少空闲空间。权重属性 ( weighty& ) 控制列 ( ) 和行 ( ) 占用weightx多少空闲空间。例如,如果您的 s 正在使用调用的对象,并且您可以使用以下代码来更改它们的相对大小。weightxweightyJPanelGridBagConstraintsrightGbcleftGbc

leftGbc.weightx = 0.5;
rightGbc.weightx = 1;

这意味着右列将占用左列两倍的备用空间,因此(希望)弥补组件大小的差异。

使用权重属性感觉像是一个非常抽象的过程,可能需要一段时间才能习惯它们,但一旦开始使用它们一段时间,你就会明白。根据您使用的组件,还有其他怪癖会影响权重属性对列/行的影响程度。

于 2013-08-22T11:28:46.650 回答
1

知道如何解决这个问题吗?

Java Swing 的工作方式与 CSS/HTML 不同。您在 Swing 中创建组件并让 GUI 担心大小。

在不知道您要完成什么的情况下,我所能做的就是定义 Swing 组件并让GridBagLayout管理布局。

如果您希望网格区域的大小相同,则可以使用 GridLayout。

于 2013-08-16T13:05:47.620 回答