Java Swing:无法使用 GridBagLayout 在整个 JPanel 中展开组件
Java Swing: cannot spread components in whole JPanel with GridBagLayout
我正在尝试实现一个简单的 JDialog,其中上面的 JPanel 有一个由 5 对 JLabel 组成的 GridBagLayout:在每对中,第一个 JLabel 的行为类似于 header,而第二个包含从Web 服务调用。这是一个例子:
如您所见,这个 window 太 "empty" 太多 space。
首先,我无法理解为什么上面板比第二面板大得多。事实上,标题为 "Risultato" 的 JPanel 也有 GridBagLayout,而第一个面板位于第 0 列和第 0 行,第二个面板位于第 0 列和第 1 行。
然后,对于每个 JLabel,我调用以下方法:
setMinimumSize(新维度(231, 25))
setPreferredSize(新维度(231, 25))
setMaximumSize(新维度(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前后空了那么多space。
有办法解决吗?那么上面板适应它的所有组件?
我无法编写任何 Java 代码,因为我的开发团队被迫使用奇怪的内部框架,我们通过编写一个 xml 文件来构建布局,其中每个标签都是一个容器或具有正确嵌套程度的组件然后,通过反射API,真正的Java类和方法被实例化和调用。反正机制应该是一样的。
更新
非常感谢 Kevin Anderson,我得以改进 JDialog 布局
相当。此外,我在上面板容器上为 GridBagConstraints
调用了 setWeightY(0.0)
,这样它也不会变得太大,并且它会调整其包含的组件的大小。
您的标签在两列中,并且它们都具有相等的 weightX,因此 GridBagLayout 为两列分配的宽度大致相等。但是,如果您为第二列中的标签赋予更大的 weightX,比如 10.0,则使第二列比第一列占据相对更多 space。您将在列之间获得更少的 space,而在面板的最右侧获得更多。
我正在尝试实现一个简单的 JDialog,其中上面的 JPanel 有一个由 5 对 JLabel 组成的 GridBagLayout:在每对中,第一个 JLabel 的行为类似于 header,而第二个包含从Web 服务调用。这是一个例子:
如您所见,这个 window 太 "empty" 太多 space。 首先,我无法理解为什么上面板比第二面板大得多。事实上,标题为 "Risultato" 的 JPanel 也有 GridBagLayout,而第一个面板位于第 0 列和第 0 行,第二个面板位于第 0 列和第 1 行。
然后,对于每个 JLabel,我调用以下方法: setMinimumSize(新维度(231, 25)) setPreferredSize(新维度(231, 25)) setMaximumSize(新维度(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前后空了那么多space。
有办法解决吗?那么上面板适应它的所有组件?
我无法编写任何 Java 代码,因为我的开发团队被迫使用奇怪的内部框架,我们通过编写一个 xml 文件来构建布局,其中每个标签都是一个容器或具有正确嵌套程度的组件然后,通过反射API,真正的Java类和方法被实例化和调用。反正机制应该是一样的。
更新
非常感谢 Kevin Anderson,我得以改进 JDialog 布局
相当。此外,我在上面板容器上为 GridBagConstraints
调用了 setWeightY(0.0)
,这样它也不会变得太大,并且它会调整其包含的组件的大小。
您的标签在两列中,并且它们都具有相等的 weightX,因此 GridBagLayout 为两列分配的宽度大致相等。但是,如果您为第二列中的标签赋予更大的 weightX,比如 10.0,则使第二列比第一列占据相对更多 space。您将在列之间获得更少的 space,而在面板的最右侧获得更多。