GridBagLayout没有排队

时间:2016-05-15 04:12:14

标签: java swing layout layout-manager gridbaglayout

我有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确实包含文字,但我将其设置在其他地方。

1 个答案:

答案 0 :(得分:4)

  

但每个容器的代码完全相同。

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

  

我有5个JP垂直排列。

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

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