我正在尝试实现一个简单的JDialog,其中上层JPanel具有一个由5对JLabel组成的GridBagLayout:在每对中,第一个JLabel充当标题,而第二个JLabel包含从Web服务调用接收的数据。这是一个例子:

java - Java Swing:无法使用GridBagLayout在整个JPanel中扩展组件-LMLPHP

如您所见,此窗口太“空”,没有太多空间。
首先,我不明白为什么上面板比第二面板大得多。实际上,标题为“ Risultato”的JPanel在第一个面板位于第0列和第0行,第二个面板位于第0列和第1行时也具有GridBagLayout。

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

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


GridBagConstraints.FIRST_LINE_START为红色;
GridBagConstraints.CENTER为绿色;
GridBagConstraints.LINE_START表示橙色;
GridBagConstraints.LINE_END为黄色;
GridBagConstraints.LAST_LINE_START代表蓝色;
GridBagConstraints.LAST_LINE_END代表白色;


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

更新

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

java - Java Swing:无法使用GridBagLayout在整个JPanel中扩展组件-LMLPHP

最佳答案

您的标签位于两列中,并且它们的权重X都相等,因此GridBagLayout会为两列分配大致相等的宽度。但是,如果您给第二列中的标签赋予更大的权重X,例如10.0,则使第二列比第一列占用更多的空间。您将获得较少的列之间的空间,而在面板的最右侧获得更多的空间。

09-19 23:34