GridBagLayout 没有排队

GridBagLayout not lining up

我有 5 个 JPanels 垂直排列。每个 JPanel 填充有相同的元素,但值不同(JPanelJButtonJLabel)。我希望它们看起来像这样:

Panel   Button   Label
Panel   Button   Label

结果变成了这样

Panel   Button   Label
Panel Button     Label

间距有点偏差,但每个容器的代码完全相同。我该如何解决这个问题?

public class AnswerChoice extends JPanel {
    private static final long serialVersionUID = 1L;

    private AnswerButton button;
    private JLabel answerLabel;

    public AnswerChoice(String imageURL) {
        setBackground(Color.RED);
        setLayout(new GridBagLayout());
        button = new AnswerButton(imageURL);
        answerLabel = new JLabel();
        answerLabel.setFont(new Font("Times New Roman", Font.PLAIN, 32));

        GridBagConstraints gbc = new GridBagConstraints();

        JPanel panel = new JPanel();
        panel.setBackground(Color.ORANGE);
        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 1;
        gbc.weightx = 0.2;
        add(panel, gbc);

        gbc.fill = GridBagConstraints.NONE;
        gbc.gridx = 2;
        gbc.weightx = 0.0;
        gbc.insets = new Insets(0, 0, 0, 30);
        add(button, gbc);

        gbc.fill = GridBagConstraints.BOTH;
        gbc.gridx = 3;
        gbc.weightx = 0.8;
        add(answerLabel, gbc);
    }

}

JLabel 中确实有文字,但我将其设置在其他地方。

but the code is exactly the same for each container.

根据添加到容器中的组件,为每个容器独立完成布局。所以容器上每个组件的大小都很重要。每个容器都不知道您还有 4 个其他容器。

I have 5 JPanels lined up vertically.

因此您需要使用 GridBagLayout 创建一个面板并将所有 15 个组件添加到该面板。然后将根据 5 行中每一行中的组件调整所有 3 列的大小。

或者我在您的逻辑中看到您尝试将相对大小分配给 3 个组件中的每一个,如 .2、0、.8。在这种情况下,您可以在每个面板上使用 Relative Layout。使用 Relative Layout 您将以首选大小显示按钮,然后分别使用 0.2f 和 0.8f 作为面板和标签的约束。