java - Java布局的对齐方式困惑

标签 java swing awt layout-manager grid-layout

尝试用 Java Swing 和 AWT 构建一个简单的注册表单,但无法实现我真正想要的。

这是我想要的结果

enter image description here

这是代码

import java.awt.*;
import javax.swing.*;


public class MainFrame {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    // Main Frame
    JFrame mainFrame = new JFrame("New Account Registration");

    JPanel borderPanel = new JPanel(new BorderLayout());
    JPanel gridPanel = new JPanel(new GridLayout(9,2));

    JPanel gridGenderPanel = new JPanel(new GridLayout(1,2));
    JPanel flowButton = new JPanel(new FlowLayout());

    //JLabels
    JLabel title = new JLabel("New Account Registration");
    JLabel name = new JLabel("Name");
    JLabel email = new JLabel("Email Address:");
    JLabel createPassword = new JLabel("Create Password:");
    JLabel confirmPassword = new JLabel("Confirm Password:");
    JLabel gender = new JLabel("Gender:");
    JLabel address = new JLabel("Address:");
    JLabel state = new JLabel("State:");
    JLabel country = new JLabel("Country:");
    JLabel phoneNo = new JLabel("Phone No:");


    String[] coutriesStrings = { "America", "Japan", "India", "Korea", "Sweden" };

    // JTextFields, JRadioButton, JComboBox
    JTextField nameField = new JTextField();
    JTextField emailField = new JTextField();
    JPasswordField passField = new JPasswordField();
    JPasswordField confirmPassField = new JPasswordField();
    JRadioButton male = new JRadioButton("Male");
    JRadioButton female = new JRadioButton("Female");
    ButtonGroup group = new ButtonGroup();
    group.add(male);
    group.add(female);
    JTextField addressField = new JTextField();
    JComboBox stateBox = new JComboBox(coutriesStrings);
    stateBox.setSelectedIndex(1);
    JTextField countryField = new JTextField();
    JTextField phoneField = new JTextField();

    JButton submitButton = new JButton("Submit");
    JButton clearButton = new JButton("Clear");


//      borderPanel.add(title, BorderLayout.NORTH);
//      gridPanel.add(title);

    // Name
    gridPanel.add(name);
    gridPanel.add(nameField);

    //Email
    gridPanel.add(email);
    gridPanel.add(emailField);

    // CreatePassword
    gridPanel.add(createPassword);
    gridPanel.add(passField);

    // Confirm Password
    gridPanel.add(confirmPassword);
    gridPanel.add(confirmPassField);

    // Gender
    gridGenderPanel.add(gender);
    gridGenderPanel.add(male);
    gridGenderPanel.add(female);
    gridPanel.add(gridGenderPanel);

    // Address
    gridPanel.add(address);
    gridPanel.add(addressField);

    // State
    gridPanel.add(state);
    gridPanel.add(stateBox);

    // Country
    gridPanel.add(country);
    gridPanel.add(countryField);

    //Button
    flowButton.add(submitButton);
    flowButton.add(clearButton);
    gridPanel.add(flowButton);

    mainFrame.add(gridPanel);   

    mainFrame.setSize(600, 700);
    mainFrame.setVisible(true);
    mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);


}

}

这是代码的结果

enter image description here

我不知道我哪里做错了,请指导我。

最佳答案

您必须将gender标签添加到gridPanel而不是gridGenderPanel

    // Gender
    //gridGenderPanel.add(gender);//The mistake
    gridPanel.add(gender);//add to main panel 
    gridGenderPanel.add(male);
    gridGenderPanel.add(female);
    gridPanel.add(gridGenderPanel);

关于java - Java布局的对齐方式困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31233313/

相关文章:

Java 小程序 : fast dragged mouse creates huge gap between dots

java - 如何在Java中正确使用keyListener

java - Spring NTLM NtlmProcessingFilter 做缓存

用于存储所有已定义字符串的 Java 约定

java - 如何从数组中为 Jtextfield 设置文本?

java - 为什么要在 EDT 线程外调用 SwingUtils.invokeAndWait() 方法?

java - 帮助将类应用为字段

java - Matcher.lookingAt() 和 find() 有什么区别?

java - JButton 单击时会在文本周围留下一些边框

java - 如何在方法中初始化后正确显示 JFrame