Java Swing:无法使用 GridBagLayout 在整个 JPanel 中展开组件

Java Swing: cannot spread components in whole JPanel with GridBagLayout

我正在尝试实现一个简单的 JDialog,其中上面的 JPanel 有一个由 5 对 JLabel 组成的 GridBagLayout:在每对中,第一个 JLabel 的行为类似于 header,而第二个包含从Web 服务调用。这是一个例子:

如您所见,这个 window 太 "empty" 太多 space。 首先,我无法理解为什么上面板比第二面板大得多。事实上,标题为 "Risultato" 的 JPanel 也有 GridBagLayout,而第一个面板位于第 0 列和第 0 行,第二个面板位于第 0 列和第 1 行。

然后,对于每个 JLabel,我调用以下方法: setMinimumSize(新维度(231, 25)) setPreferredSize(新维度(231, 25)) setMaximumSize(新维度(231, 25))

此外,我为与每个 JLabel 关联的每个 GridBagConstraints 设置了锚点,例如:

最后我还为每个约束调用 setWeightX(1.0);。 不知道为什么会是这个效果,为什么JLabel前后空了那么多space。 有办法解决吗?那么上面板适应它的所有组件? 我无法编写任何 Java 代码,因为我的开发团队被迫使用奇怪的内部框架,我们通过编写一个 xml 文件来构建布局,其中每个标签都是一个容器或具有正确嵌套程度的组件然后,通过反射API,真正的Java类和方法被实例化和调用。反正机制应该是一样的。

更新

非常感谢 Kevin Anderson,我得以改进 JDialog 布局 相当。此外,我在上面板容器上为 GridBagConstraints 调用了 setWeightY(0.0),这样它也不会变得太大,并且它会调整其包含的组件的大小。

您的标签在两列中,并且它们都具有相等的 weightX,因此 GridBagLayout 为两列分配的宽度大致相等。但是,如果您为第二列中的标签赋予更大的 weightX,比如 10.0,则使第二列比第一列占据相对更多 space。您将在列之间获得更少的 space,而在面板的最右侧获得更多。