GridBagLayout中的项目未正确对齐

时间:2018-11-16 22:31:25

标签: java swing

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

enter image description here

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

console.log

我希望这能行得通,因为对于我来说这为什么行不通没有意义,这是代码。

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

我想要实现的结果是

enter image description here

我已经用FlowLayout实现了它,但是当调整框架大小时它并没有打包,并且底部栏有点大。

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

2 个答案:

答案 0 :(得分:4)

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

这将使您理解apkPath必须从x的{​​{1}}开始,并“跨越”两列。

当前0apkPath使用的x位置相同,您需要先对其进行更改,然后才能再次使用。

newPkg

好的,但是现在它的大小与gbc.gridy = 1; gbc.gridx = 0; JTextField apkPath = new JTextField(); container.add(apkPath, gbc); 相同,我们需要告诉oldPkg我们要跨越多列

GridBagLayout

现在应允许文本字段流经这两列

我可能建议看看How to Use GridBagLayout了解更多详情

答案 1 :(得分:-2)

稍微偏离主题: 可能我只是建议不要为90%的内置布局而烦恼,而只是去使用MigLayout。

有一个MigLayout核心罐和MigLayout摆动罐。 (不要误认为MigLayout SWT jar,也不要在import语句中使用SWT版本。)

我想许可证是自由的。但是,您可以检查它是否符合您的需求。

http://www.miglayout.com/

(一个快乐的用户。不隶属于)

这仅需几行就可以做很多事情:

public class LayoutAnswer extends JFrame {
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                LayoutAnswer window = new LayoutAnswer();

                window.init();
                window.pack();

                window.setVisible(true);
                window.setLocationRelativeTo(null);
                window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            }
        });

    }

    private JPanel panel = new JPanel( new MigLayout("insets 10","[300::, grow][400::, grow]","[100:150:200][100:150:200]") );
    private JLabel lbl1 = new JLabel("One");
    private JLabel lbl2 = new JLabel("Two");
    private JLabel lbl3 = new JLabel("Three");
    public void init() {
        add(panel, BorderLayout.CENTER);

        panel.add(lbl1, "");
        panel.add(lbl2, "wrap");
        panel.add(lbl3, "span 2");
    }
}

Sample image. Resizes nicely.