首页 文章

Java Swing:无法使用GridBagLayout在整个JPanel中传播组件

提问于
浏览
0

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

enter image description here

如您所见,此窗口太“空”,空间太大 . 首先,我无法理解为什么上面板比第二块面板大得多 . 实际上,具有“Risultato” Headers 的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) ,这样它也不会变得太大而且它会调整到其包含的组件的大小 .

enter image description here

1 回答

  • 1

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

相关问题