Mam ten kod, który wyświetla etykietę, pole tekstowe i przycisk:

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class Form extends JFrame implements ActionListener  {
    private JLabel label = new JLabel("What's your name:");
    private JTextField field = new JTextField(15);
    private JButton button = new JButton("Send");

    public Form()  {
        setTitle("Name Form");
        setLayout(new GridBagLayout());

        GridBagConstraints gbc = new GridBagConstraints();
        gbc.insets = new Insets(10, 10, 10, 1);
        gbc.anchor = GridBagConstraints.LINE_END;
        gbc.gridx = 0;
        gbc.gridy = 0;
        add(label, gbc);

        gbc = new GridBagConstraints();
        gbc.insets = new Insets(10, 10, 10, 10);
        gbc.fill = GridBagConstraints.HORIZONTAL;
        gbc.gridx = 1;
        gbc.gridy = 0;
        add(field, gbc);

        gbc = new GridBagConstraints();
        gbc.insets = new Insets(10, 10, 10, 10);
        gbc.anchor = GridBagConstraints.LINE_END;
        gbc.gridx = 0;
        gbc.gridy = 1;
        add(button, gbc);
    }

    @Override
    public void actionPerformed(ActionEvent event) {


    }

    public static void main(String[] args) {
        Form myFrame = new Form();

        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.pack();
        myFrame.setVisible(true);
    }

}

Pokazuje to:

enter image description here

Potrzebuję przycisku, aby był taki poziomo wyśrodkowany:

enter image description here

Jak to zrobić z GridBagLayout? Próbowałem różnych wartości dla anchor, ale nic nie działało.

EDYTOWAĆ:

Dodawanie gbc.gridwidth = 2 pokazał to:

enter image description here

0
parsecer 12 październik 2020, 03:17

1 odpowiedź

Najlepsza odpowiedź

Przycisk musi rozciągać się na dwóch kolumnach, więc ustaw gridwidth.

    gbc.gridwidth = 2;

(BTW, nie musisz tworzyć nowego GridBagConstraints dla każdego komponentu. Wystarczy ponownie użyć, a tylko zmienić właściwości, które są różne.)

2
Tom Hawtin - tackline 12 październik 2020, 00:23