GridBagLayout:如何防止不可见的组件崩溃

时间:2010-01-21 10:41:07

标签: java gridbaglayout

当使GridBagLayout管理的布局的各个组件不可见时,布局中其余组件的排列会不断变化。 GridBagLayout似乎使用不可见组件“折叠”单元格,导致其他组件更改位置。这是一种非常烦人的行为,我一直在寻找一种方法来阻止它这样做。

我尝试过的一种方法是在相同的单元格中添加一个间隔符,其固定大小等于可能隐藏的组件的首选大小,但如果要改变的首选大小,则会是保持垫片同步很麻烦。 有没有更好的办法?

实际上,如果GridBagLayout真的完全忽略了具有不可见组件的单元格,它就不会那么糟糕了,但它仍然会考虑单元格的插图,所以如果你有一个输入字段的布局并使用插图来整齐排列它们之间有规则的间隙,然后在中间隐藏一个组件将其从布局中移除但留下间隙,这通常意味着周围的组件一起流动,但它们之间有一个丑陋的双宽间隙......

4 个答案:

答案 0 :(得分:8)

使用JPanel(或Box)作为占位符怎么样?
将JPanel放入每个单元格并将组件添加到面板中。如果您将组件变为不可见,则面板应该仍在那里......

答案 1 :(得分:1)

一种可能性是使用带有CardLayout的嵌套面板来隐藏组件,而不是将它们设置为不可见。 CardLayout使面板始终具有最大“卡”的大小。

或者,您可以尝试使用新的(从Java 6开始)GroupLayout而不是GridBagLayout - 它的IMO更容易使用,而且几乎同样强大。

答案 2 :(得分:1)

使用MigLayout

将喜悦带回布局^^。

我过去也使用过GridBagLayout,这太可怕了。很多样板代码,如果你添加一个小组件,布局很可能是搞砸的。

另一种选择是使用Boxlayout

答案 3 :(得分:0)

IIRC,我过去所做的是将组件放在容器中(或使用单独的组件),模仿原始组件的大小,而不是它是否为隐藏状态。将它放在一个方法或一个外观到网格包中,你的布局代码可以保持良好和干净。