我正在尝试实现一个简单的JDialog,其中上层JPanel具有一个由5对JLabel组成的GridBagLayout:在每对中,第一个JLabel充当标题,而第二个JLabel包含从Web服务调用接收的数据。这是一个例子:
如您所见,此窗口太“空”,没有太多空间。
首先,我不明白为什么上面板比第二面板大得多。实际上,标题为“ 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
,这样它也不会太大,并且将其调整为包含的组件的大小。
最佳答案
您的标签位于两列中,并且它们的权重X都相等,因此GridBagLayout会为两列分配大致相等的宽度。但是,如果您给第二列中的标签赋予更大的权重X,例如10.0,则使第二列比第一列占用更多的空间。您将获得较少的列之间的空间,而在面板的最右侧获得更多的空间。