У меня есть такой код:

import javax.swing.*;
import java.awt.*;

public class Test extends JFrame {
    public Test()  {
        setLocationByPlatform(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setLocationByPlatform(true);

        GridBagConstraints constraints = new GridBagConstraints();
        constraints.anchor = GridBagConstraints.LINE_START;
        constraints.insets = new Insets(5, 5, 0, 5);

        JRadioButton button1 = new JRadioButton("Aaaaaaaaa");
        JRadioButton button2 = new JRadioButton("Bbbb");
        JRadioButton button3 = new JRadioButton("cccccC");

        JPanel panel = new JPanel();
        panel.setLayout(new GridBagLayout());

        panel.add(new JLabel("Test"), createConstraints(0, 0));
        panel.add(button1, createConstraints(0, 1));
        panel.add(button2, createConstraints(1, 1));
        panel.add(button3, createConstraints(2, 1));

        JTextField text = new JTextField();
        GridBagConstraints c = createConstraints(0, 2);
        c.gridwidth = 3;
        panel.add(text, c);

        add(panel, BorderLayout.PAGE_START);

        setSize(350, 360);
        setVisible(true);
    }

    public static void main(String[] args) {
        EventQueue.invokeLater(() -> {
            Test frame = new Test();
            frame.setVisible(true);
        });
    }

    private GridBagConstraints createConstraints(int x, int y) {
        GridBagConstraints c = new GridBagConstraints();
        c.anchor = GridBagConstraints.LINE_START;
        c.insets = new Insets(5, 5, 0, 5);
        c.gridx = x;
        c.gridy = y;
        return c;
    }
}

Это создает:

enter image description here

Но мне нужно, чтобы текстовое поле всегда охватывало 2 столбца, и все было выровнено по левому краю:

enter image description here

Как я могу это сделать?

0
parsecer 9 Апр 2021 в 05:53

1 ответ

Лучший ответ
c.gridwidth = 3;

Должно быть:

c.gridwidth = 2; // unless it should fill all THREE columns!
c.fill = GridBagConstraints.HORIZONTAL;

Результат:

enter image description here

Изменить

Как в сторону. «Объединение двух ячеек» кажется совершенно произвольным способом изменения размера текстового поля. Лучше указать количество столбцов (примерно соответствует количеству символов) при его создании, поместить его в собственную строку (охватывающую 3 ячейки шириной) и не указать его для заполнения этого строка.

2
Andrew Thompson 9 Апр 2021 в 03:13