如何让 GridBagLayout 正确排列

How to get GridBagLayout to line up correctly

我有一个 JPanel 作为 JScrollPane 的视口,并且 JPanel 有一个 GridBagLayout。该程序的用户将能够向 JPanel 添加行,并且 JPanel 将相应地扩展。它可以展开,但是当它不需要展开时,它不会按照我想要的顺序添加它们。我正在努力实现:

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

但我得到的是:

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

然后:

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

一旦空间用完,它将展开并且 JPanel 正确对齐。

我尝试设置 weighty = 0.9 以获得所需的效果,并且我将锚点 属性 设置为 NORTHWEST,但我得到了第二个结果。是否可以在 GridBagLayout 中实现所需的效果?

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

我想你想要 weighty = 0 and/or fill = NONE 作为你的组件。填充和权重仅适用于您希望组件扩展以填充可用 space,但您希望组件仅填充它们自然需要的 space 的情况。

然后,为了收集底部的所有 "empty" space,将 "spacer"(我使用 new JPanel())添加到 third/next 行。给出 spacer weighty = 1fill = VERTICAL。然后,这个空白面板将展开以填充两行可见元素下方的 space。