JAVA Swing GridLayout 无法正常工作

标签 java swing layout-manager grid-layout

下面的图像将清楚地定义我在使用GridLayout时遇到的问题

enter image description here

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的位置。

最佳答案

您向容器中添加了两次组件。

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

关于JAVA Swing GridLayout 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27155543/

相关文章:

java - 使用 Swing 组件将文本发送到另一个对象

java - GridBagLayout 未填充 JPanel

java - JPA 只读映射

旋转矩形的Java碰撞检测?

java - Intent 错误 (Android)

java - 关闭连接后 Socket 和 SwingWorker 不工作

java - ArrayList 中的 JTree 不显示节点

java - 我想给用户一个指定的消息,但我的程序给了用户所有的 java 消息

java - 使用 applet/GridBagLayout 的 GUI

java - JFrame 文本组件未正确显示