Java Swing:无法使用GridBagLayout

时间:2018-01-11 11:44:05

标签: java swing jpanel layout-manager gridbaglayout

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

enter image description here

正如您所看到的,此窗口太“空”,空间太大。 首先,我无法理解为什么上面板比第二块面板大得多。事实上,带有“Risultato”标题的JPanel也有GridBagLayout,而第一个面板位于第0列和第0行,第二个面板位于第0列和第1行。

然后,对于每个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,这样它也不会变得太大,并且它会调整为包含的组件。

enter image description here

1 个答案:

答案 0 :(得分:1)

您的标签分为两列,它们都具有相同的权重X,因此GridBagLayout为两列分配大致相等的宽度。但是如果你给第二列中的标签赋予更大的权重X,比如10.0,那么使第二列比第一列占用更多的空间。在面板的最右侧,您将获得更少的空间和更多的空间。