Выравнивание формы

126
20 сентября 2019, 02:40

Нужно создать форму регистрации, чисто визуально, и я не знаю как выровнять ее элементы. Располагаться они должны так: название поля - рядом само поле, и так в каждой строке код:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
class Registration extends JDialog {
    private final JLabel label1 = new JLabel("Ф.И.О: ");
    private final JLabel label2 = new JLabel("Адрес: ");
    private final JLabel label3 = new JLabel("Город: ");
    private final JLabel label4 = new JLabel("Почтовый индекс: ");
    private final JLabel label5 = new JLabel("Телефон: ");
    private final JLabel label6 = new JLabel("Дополнительная информация: ");
    private final JLabel label7 = new JLabel("E-mail: ");
    private final JLabel label8 = new JLabel("Пароль: ");
    private final JLabel label9 = new JLabel("Повторите пароль: ");
    private final JTextField field1 = new JTextField(40);
    private final JTextField field2 = new JTextField(40);
    private final JTextField field3 = new JTextField(40);
    private final JTextField field4 = new JTextField(40);
    private final JTextField field5 = new JTextField(40);
    private final JTextField field6 = new JTextField(40);
    private final JTextArea text = new JTextArea();
    private final JPasswordField password1 = new JPasswordField();
    private final JPasswordField password2 = new JPasswordField();
    private final Checkbox checkBox = new Checkbox("Я хочу получать новости и спецпредложения");
    public Registration() {
    JFrame frame = new JFrame();
    frame.setSize(700, 700);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setVisible(true);
    JPanel grid = new JPanel();
    grid.setLayout(new BoxLayout(grid, BoxLayout.PAGE_AXIS));
    grid.add(label1);
    grid.add(field1);
    grid.add(label2);
    grid.add(field2);
    grid.add(label3);
    grid.add(field3);
    grid.add(label4);
    grid.add(field4);
    grid.add(label5);
    grid.add(field5);
    grid.add(label6);
    grid.add(text);
    grid.add(label7);
    grid.add(field6);
    grid.add(label8);
    grid.add(password1);
    grid.add(label9);
    grid.add(password2);
    //grid.add(checkBox);
    frame.add(grid);
}
}
public class FlowLayoutTest {
    public static void main(String[] args) {
        Registration forma = new Registration();
    }
}

и да, выравнивание PAGE_AXIS, которое я использовала, работает не так, как мне нужно

Answer 1

Попробуйте использовать GridLayout

class Registration extends JDialog {
private final JLabel lblFIO = new JLabel("Ф.И.О: ");
private final JLabel lblAddress = new JLabel("Адрес: ");
private final JLabel lblCity = new JLabel("Город: ");
private final JLabel lblMailIndex = new JLabel("Почтовый индекс: ");
private final JLabel lblPhone = new JLabel("Телефон: ");
private final JLabel lblAdditionalInfo = new JLabel("Дополнительная информация: ");
private final JLabel lblEmail = new JLabel("E-mail: ");
private final JLabel lblPassword = new JLabel("Пароль: ");
private final JLabel lblConfirmPassword = new JLabel("Повторите пароль: ");
private final JTextField fldFIO = new JTextField(40);
private final JTextField fldAddress = new JTextField(40);
private final JTextField fldCity = new JTextField(40);
private final JTextField fldMailIndex = new JTextField(40);
private final JTextField fldPhone = new JTextField(40);
private final JTextArea textAdditionalInfo = new JTextArea();
private final JTextField fldEmail = new JTextField(40);
private final JPasswordField password1 = new JPasswordField();
private final JPasswordField password2 = new JPasswordField();
private final Checkbox checkBox = new Checkbox("Я хочу получать новости и спецпредложения");
public Registration() {
    JFrame frame = new JFrame();
    frame.setSize(570, 300);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    JPanel grid = new JPanel(new GridLayout(9,2,5,5));
    Dimension lblDim = new Dimension(200,21);
    lblFIO.setMaximumSize(lblDim);
    lblAddress.setMaximumSize(lblDim);
    lblCity.setMaximumSize(lblDim);
    lblMailIndex.setMaximumSize(lblDim);
    lblPhone.setMaximumSize(lblDim);
    lblAdditionalInfo.setMaximumSize(lblDim);
    lblEmail.setMaximumSize(lblDim);
    lblPassword.setMaximumSize(lblDim);
    lblConfirmPassword.setMaximumSize(lblDim);
    Dimension fldDim = new Dimension(200,21);
    fldFIO.setMaximumSize(fldDim);
    fldAddress.setMaximumSize(fldDim);
    fldCity.setMaximumSize(fldDim);
    fldMailIndex.setMaximumSize(fldDim);
    fldPhone.setMaximumSize(fldDim);
    textAdditionalInfo.setMaximumSize(new Dimension(200,100));
    fldEmail.setMaximumSize(fldDim);
    password1.setMaximumSize(fldDim);
    password2.setMaximumSize(fldDim);

    grid.add(lblFIO);
    grid.add(fldFIO);
    grid.add(lblAddress);
    grid.add(fldAddress);
    grid.add(lblCity);
    grid.add(fldCity);
    grid.add(lblMailIndex);
    grid.add(fldMailIndex);
    grid.add(lblPhone);
    grid.add(fldPhone);
    grid.add(lblAdditionalInfo);
    grid.add(new JScrollPane(textAdditionalInfo,ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS, ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER));
    grid.add(lblEmail);
    grid.add(fldEmail);
    grid.add(lblPassword);
    grid.add(password1);
    grid.add(lblConfirmPassword);
    grid.add(password2);
    //grid.add(checkBox);
    frame.add(grid);
    frame.setVisible(true);
}}

Oracle: How to Use GridLayout

READ ALSO
Нажатие кнопки в окне приложения

Нажатие кнопки в окне приложения

Подскажите библиотеку на Jave для нажатия кнопки или клик в окнеНапример имеется калькулятор,и необходимо нажать кнопку 1 и кликнуть на плюс

125
Безопасно ли приведение типа Set к List? [закрыт]

Безопасно ли приведение типа Set к List? [закрыт]

Компилятор не жалуется абсолютно, но все же интересно

106
Не правильно читает дату из базы данных

Не правильно читает дату из базы данных

На JAVA написан школьный журнал там есть фио, дата, предмет, оценкаВсе данные от берет базы данных SQL, но только дату он не так отображает вообще...

141
Прозрачный текст с белым бордером

Прозрачный текст с белым бордером

Каким образом достичь данного результата?

121