1

这就是我的 GUI 现在的样子: 在此处输入图像描述

我希望它使三列平均分布。为此,我将每个权重设置为 1/3。显然,它不起作用。

这是我创建框架的代码:

public static JPanel createLayout(int rows) {
    JPanel product = new JPanel(new GridBagLayout());
    String[] lables = {"School    ", "Advanced #", "Novice #   "};
    double weight = .3333333333333;

    GridBagConstraints c = new GridBagConstraints();
    c.insets = new Insets(3, 3, 3, 3);
    c.weightx = weight;
    c.fill = GridBagConstraints.HORIZONTAL;
    c.anchor = GridBagConstraints.CENTER;
    c.gridy = 1;
    for (int j = 0; j < lables.length; j++) {
        c.gridx = j;
        JLabel l = new JLabel(lables[j]);
        product.add(l, c);
    }

    for (int i = 0; i < rows; i++) {
        c.gridy++;
        for (int j = 0; j < lables.length; j++) {
            c.gridx = j;
            JTextField f = new JTextField();
            product.add(f, c);
        }
    }
    c.gridy++;
    c.gridx = 0;
    c.anchor = GridBagConstraints.NORTHWEST;
    c.fill = GridBagConstraints.NONE;

    JPanel b = new JPanel();
    JButton add = new JButton("+");
    b.add(add);
    JButton delete = new JButton("-");
    b.add(delete);
    product.add(b, c);
    return product;
}
public static void main(String[] args) throws IOException {
    JFrame frame = new JFrame("Debate Calculator");
    JPanel debates = new JPanel();
    frame.add(createLayout(5), BorderLayout.NORTH);
    frame.pack();
    frame.setVisible(true);
}
4

2 回答 2

3

问题是您的组件一开始的大小并不相同。我无法确切解释它为什么会这样做,但是标签的大小各不相同,因为它们具有不同数量的字符。我知道您尝试制作相同的尺寸,但“”与“W”不同。

我将您的代码更改为使用以下代码,它似乎有效:

JTextField f = new JTextField(10);

现在每个文本字段的宽度都大于标签,因此这是用于为每列提供比例大小的宽度。

您可以考虑使用 GridLayout。默认行为是使每个单元格大小相同。

于 2013-04-28T23:04:36.660 回答
0

问题是底部的按钮栏。在该元素上将 gridwidth 设置为 REMAINDER。

于 2013-04-28T22:44:32.287 回答