我正在尝试实现一个简单的JDialog,其中上层JPanel有一个GridBagLayout,它由5对JLabel组成:每一对,第一个JLabel就像一个头,而第二个包含从Web服务调用接收的数据。这是一个例子:
正如您所看到的,此窗口太“空”,空间太大。 首先,我无法理解为什么上面板比第二块面板大得多。事实上,带有“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
,这样它也不会变得太大,并且它会调整为包含的组件。
答案 0 :(得分:1)
您的标签分为两列,它们都具有相同的权重X,因此GridBagLayout为两列分配大致相等的宽度。但是如果你给第二列中的标签赋予更大的权重X,比如10.0,那么使第二列比第一列占用更多的空间。在面板的最右侧,您将获得更少的空间和更多的空间。