2016-01-20 38 views
0

我有一个JPanel作为JScrollPane的视口,而JPanel有一个GridBagLayout。程序的用户将能够将行添加到JPanel,并且JPanel将相应地扩展。它扩展了所有权利,但是当它不需要扩展时,它不会按照我想要的顺序添加它们。我想实现:如何让GridBagLayout正确排列

______ 
|XXXXXX| 
|XXXXXX| 
|  | 
|  | 
|  | 
-------- 

而是我越来越:

______ 
|XXXXXX| 
|  | 
|XXXXXX| 
|  | 
|  | 
-------- 

然后:

______ 
|XXXXXX| 
|  | 
|XXXXXX| 
|  | 
|XXXXXX| 
-------- 

一旦它运行的空间,这将扩大和JPanels正确对齐。

我试着设置weighty = 0.9以获得所需的效果,并且我将anchor属性设置为NORTHWEST,但是我得到了第二个结果。 GridBagLayout中可能需要的效果是什么?

+1

我想你想'重量= 0'和/或不填充。填充和重量仅适用于您希望组件扩展以填充可用空间的情况。 – dsh

+0

将组件对齐在一起,但现在它们被添加到JPanel的中心。有没有办法让它们锚定在顶部? (anchor现在设置为NORTHWEST) – kneedhelp

+1

在第三行添加一个“spacer”(我使用'new JPanel()'),给它一个'weighty = 1'和'fill = VERTICAL'。这个空的面板将会展开以填充两行可见元素下方的空间。 – dsh

回答

1

至少有一个组件需要一个weighty=1,因此请在末尾添加一个间隔项,并使用weighty=1。所有其他组件应该有weighty=0。否则,GridBagLayout不知道如何分配剩余空间并将其平均分配给所有组件。

1

我认为你想weighty = 0和/或fill = NONE为您的组件。填充和重量只适用于您希望组件扩展以填充可用空间的情况,但您希望组件仅填充它们自然需要的空间。

然后,为了收集底部的所有“空白”空间,在第三行/下一行添加一个“spacer”(我使用新的JPanel())。给予垫片weighty = 1fill = VERTICAL。这个空的面板将会展开以填充两行可见元素下方的空间。