Java Swing : cannot spread components in whole JPanel with GridBagLayout

标签 java swing jpanel layout-manager gridbaglayout

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

enter image description here

正如您所看到的,这个窗口太“空”,空间太多。 首先,我不明白为什么上面的面板比第二个面板大得多。事实上,标题为“Risultato”的 JPanel 也有 GridBagLayout,第一个面板位于第 0 列第 0 行,第二个面板位于第 0 列第 1 行。

然后,对于每个 JLabel,我调用以下方法: setMinimumSize(新尺寸(231, 25)) setPreferredSize(新尺寸(231, 25)) setMaximumSize(新尺寸(231, 25))

此外,我为与每个 JLabel 关联的每个 GridBagConstraints 设置了 anchor ,如下所示:

  • GridBagConstraints.FIRST_LINE_START 为红色;
  • GridBagConstraints.CENTER 表示绿色;
  • GridBagConstraints.LINE_START 表示橙色;
  • GridBagConstraints.LINE_END 表示黄色;
  • GridBagConstraints.LAST_LINE_START 表示蓝色;
  • GridBagConstraints.LAST_LINE_END 为白色;

最后,我还为每个约束调用 setWeightX(1.0);。 我不知道为什么会是这样的效果,也不知道为什么所有的JLabels前后都有那么多的空白空间。 有办法解决吗?那么上面的面板会适应它的所有组件吗? 我无法编写任何 Java 代码,因为我的开发团队被迫使用奇怪的内部框架,我们通过编写 xml 文件来构建布局,其中每个标签都是具有正确嵌套程度的容器或组件,然后通过 Reflection API,真正的Java 类和方法被实例化和调用。不管怎样,机制应该是一样的。

更新

非常感谢 Kevin Anderson,我能够改进 JDialog 布局 相当。此外,我在上部面板容器上为 GridBagConstraints 调用了 setWeightY(0.0),这样它也不会变得太大,并且可以根据其包含的组件调整大小。

enter image description here

最佳答案

您的标签位于两列中,并且它们都具有相同的weightX,因此GridBagLayout 为两列分配大约相等的宽度。但是,如果您为第二列中的标签赋予更大的weightX,例如10.0,则使第二列比第一列占用更多的空间。您将在列之间获得更少的空间,而在面板的最右侧获得更多的空间。

关于Java Swing : cannot spread components in whole JPanel with GridBagLayout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48206253/

相关文章:

java - Java 中的 ISO-8859-1 到 UTF-8

java - 在 StringBuilder 中包含换行符

java - 使用构造函数的 Graphics2D

java - Jtable cellRenderer 更改行的背景

java - jbuttons 的波动

Java Spring启动: Reload config without spring cloud config server

java - 刷新网页时 Apache ignite 出现错误

java - 如何将 L 附加到变量名

java - 将JPanel绘制成JPanel

java - JPanel按钮等