[英]Setting the position of GridBagLayout at the top of JPanel in Java Swing
[英]Java Swing: cannot spread components in whole JPanel with GridBagLayout
我正在尝试实现一个简单的JDialog,其中上层JPanel具有一个由5对JLabel组成的GridBagLayout:在每对中,第一个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类和方法被实例化并调用。 无论如何,机制应该相同。
UPDATE
非常感谢Kevin Anderson,我能够大大改善JDialog布局。 此外,我在上面板容器上为GridBagConstraints
调用了setWeightY(0.0)
,这样它也不会太大,并且可以调整为包含的组件的大小。
您的标签位于两列中,并且它们的权重X均相等,因此GridBagLayout会为两列分配大致相等的宽度。 但是,如果您给第二列中的标签赋予更大的权重X,例如10.0,则使第二列比第一列占用更多的空间。 您将获得较少的列之间的空间,而在面板的最右侧获得更多的空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.