如何让 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 = 1
和 fill = VERTICAL
。然后,这个空白面板将展开以填充两行可见元素下方的 space。
我有一个 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 = 1
和 fill = VERTICAL
。然后,这个空白面板将展开以填充两行可见元素下方的 space。