GradBagLayout не распределяет столбцы по весу

62
8

Вот как выглядит мой графический интерфейс: enter image description here

Я хочу, чтобы эти три столбца были одинаково распределены. Для этого я устанавливаю каждый вес, равный 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);
}

спросил(а) 2021-01-19T13:01:28+03:00 2 месяца, 3 недели назад
1
Решение
86

Проблема в том, что вы не одинаковые по размеру компоненты. Я не могу точно объяснить, почему он делает то, что он делает, но размер ваших ярлыков различен, потому что у них разное количество символов. Я знаю, что вы пытались сделать то же самое, но "" это не то же самое, что "W".

Я изменил свой код, чтобы использовать следующее и, похоже, работает:

JTextField f = new JTextField(10);

Теперь ширина каждого текстового поля больше метки, так что это ширина, которая используется для того, чтобы дать каждому столбцу пропорциональный размер.

Вы можете использовать GridLayout. Поведение по умолчанию состоит в том, чтобы сделать каждую ячейку одинакового размера.

ответил(а) 2021-01-19T13:01:28+03:00 2 месяца, 3 недели назад
44

Проблема заключается в вашей панели кнопок внизу. Задайте ширину сетки для REMAINDER для этого элемента.

ответил(а) 2021-01-19T13:01:28+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема