简体   繁体   中英

JAVA Swing GridLayout not working properly

Below is the image that will clearly define my problem while using GridLayout

在此处输入图片说明

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);
}

Desire Result:

UserName | TextField
Passowrd | TextField
         | LoginButon

Please let me know where I am worng using GridLayout .

You're adding a component twice to the container.

  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));

Get rid of that 2nd addition:

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

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM