首页 > 解决方案 > GridBagLayout 中的项目未正确对齐

问题描述

我正在尝试对齐 GridBagLayout 中的 3 个项目,其中 2 个项目位于顶部,1 个项目位于底部。两个项目应该是相同的大小。我试图用 BorderLayout 和 GridBagLayout 来实现这一点,但没有运气。

在此处输入图像描述

这是我对 GridBagLayout 的尝试,您可以看到它们没有正确对齐。这就是我试图做的。

Add first item
Set the x to 1
Add second item
Set the y to 1
Add the last item

我希望这会起作用,因为这对我来说没有意义,为什么这不起作用,这是它的代码。

    GridBagConstraints gbc = new GridBagConstraints();
    gbc.gridx = 0;
    gbc.gridy = 0;
    JTextField oldPkg = new JTextField();
    container.add(oldPkg, gbc);
    gbc.gridx = 1;
    JTextField newPkg = new JTextField();
    gbc.gridy = 1;
    JTextField apkPath = new JTextField();
    container.add(apkPath, gbc);

我想要达到的结果是

在此处输入图像描述

我已经使用 FlowLayout 实现了它,但是在调整框架大小时它不会重新打包,并且底部栏有点大。

如何使用 GridBagLayout 或任何其他布局来实现这一点,以便在大小更改时保持不变?

标签: javaswing

解决方案


有时,您需要退后一步,尝试不同的方法。也许从一张纸开始,您可以在其中绘制布局并绘制约束。

这将引导您理解apkPath需要从两列开始x0“跨越”两列。

当前apkPath使用的x位置与 相同newPkg,您需要在再次使用之前更改它。

gbc.gridy = 1;
gbc.gridx = 0;
JTextField apkPath = new JTextField();
container.add(apkPath, gbc);

好的,但现在它的大小与 相同oldPkg,我们需要告诉GridBagLayout我们要跨越多个列

gbc.gridy = 1;
gbc.gridx = 0;
gbc.gridwidth = 2;
JTextField apkPath = new JTextField();
container.add(apkPath, gbc);

现在应该允许文本字段流过两列

我可能会建议查看如何使用 GridBagLayout了解更多详细信息


推荐阅读