JAVA Swing GridLayout не работает должным образом

1

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

Изображение 174551

private void init() {
    JFrame frame = new JFrame("Login");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JTextField loginUNTextField = new JTextField();
    JTextField loginPTextField = new JTextField();

    JTextField registerUNTextField = new JTextField();
    JTextField registerPTextField = new JTextField();
    JTextField registerETextField = new JTextField();

    JButton login = new JButton("Login");
    JButton register = new JButton("Register");

    JLabel loginUsername = new JLabel("Username");
    JLabel loginPassword = new JLabel("Password");

    JLabel registerUsername = new JLabel("Username");
    JLabel registerPassword = new JLabel("Password");
    JLabel registerEmail = new JLabel("Email");

    JPanel loginUNPanel = new JPanel(new GridLayout(3,2));

    loginUNPanel.add(loginUsername);
    loginUNPanel.add(loginUNTextField);

    loginUNPanel.add(loginPassword);  // Cause Problem
    loginUNPanel.add(loginPTextField);

    loginUNPanel.add(new JLabel(""));  // Cause Problem
    loginUNPanel.add(login);

    JPanel registerUNPanel = new JPanel(new GridLayout(4,2));

    registerUNPanel.add(registerUsername);
    registerUNPanel.add(registerUNTextField);

    registerUNPanel.add(registerPassword);
    registerUNPanel.add(registerPTextField);

    registerUNPanel.add(registerEmail);
    registerUNPanel.add(registerETextField);

    registerUNPanel.add(new JLabel(""));
    registerUNPanel.add(register);

    loginUNPanel.add(loginPassword);

    JPanel main = new JPanel(new GridLayout(1,2));

    main.add(loginUNPanel);
    main.add(registerUNPanel);

    frame.add(main);

    frame.pack();
    frame.setVisible(true);
}

Желание Результат:

UserName | TextField
Passowrd | TextField
         | LoginButon

Пожалуйста, дайте мне знать, где я нахожусь, используя GridLayout.

  • 0
    Ваш код работал нормально для меня. Попробуйте еще раз проверить отображение этого кода. Обратите внимание, что я добавил main к JFrame, frame , вызывал pack() для frame а затем вызывал setVisible(true) для frame. Пожалуйста, покажи немного больше кода.
  • 0
    Ну, на самом деле у меня есть еще одна таблица для регистрации ... Позвольте мне обновить мой вопрос с этим кодом. Может быть, это будет проблемой.
Показать ещё 2 комментария
Теги:
swing
layout-manager
grid-layout

1 ответ

2
Лучший ответ

Вы добавляете компонент в контейнер дважды.

  JPanel loginUNPanel = new JPanel(new GridLayout(3,2));

  loginUNPanel.add(loginUsername);
  loginUNPanel.add(loginUNTextField);

  loginUNPanel.add(loginPassword);  // ***** adding it once ***** 
  loginUNPanel.add(loginPTextField);

  loginUNPanel.add(new JLabel(""));  
  loginUNPanel.add(login);

  JPanel registerUNPanel = new JPanel(new GridLayout(4,2));

  registerUNPanel.add(registerUsername);
  registerUNPanel.add(registerUNTextField);

  registerUNPanel.add(registerPassword);
  registerUNPanel.add(registerPTextField);

  registerUNPanel.add(registerEmail);
  registerUNPanel.add(registerETextField);

  registerUNPanel.add(new JLabel(""));
  registerUNPanel.add(register);

  loginUNPanel.add(loginPassword);  // ***** adding it again. ***** 

  JPanel main = new JPanel(new GridLayout(1,2));

Избавьтесь от этого второго дополнения:

// loginUNPanel.add(loginPassword);  // *** this

JPanel main = new JPanel(new GridLayout(1,2));
  • 0
    Спасибо .. Его сработало.
  • 1
    @Junaid: иногда вам просто нужна другая пара глаз, чтобы просмотреть код. Рад, что это работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню