2013-08-16 38 views
0

我有一个JPanelGridBagLayout设置。它有2列和1行(2个单元格)。每个单元格包含一个JPanel,其中包含一个JLabel(组件的类型不重要)。GridBagLayout扩展列

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

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

任何想法如何我可以解决这个问题?

回答

1

任何想法如何我可以解决这个问题?

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

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

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

+0

不幸的是,我需要跨越GridBagLayout允许的少数列或行的一些组件。对我来说最好的解决方案是让GridBagLayout拥有所有单元格的大小,除了某些组件比它包含的单元大。 – pbartosz

1

恐怕这是一个难以回答的问题,因为GridBagLayout没有以这种方式排列它的列和行。如果您有两列和两个组件,那么这些列将根据放入这些列的最大组件的大小自行调整大小。所以你的左栏更大,因为你左边的组件更大。

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

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

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

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