
本代码运行结果如上图所示
package _1;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JPasswordField;
import javax.swing.JRadioButton;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;
public class RegistrationForm extends JFrame{
private JTextField usernameField;//用户名输入框
private JPasswordField passwordField;//密码输入框
private JRadioButton maleRadio,femaleRadio;//性别单选按钮
private JCheckBox sportCheck,readCheck,musicCheck;//爱好复选框
public RegistrationForm() {
setTitle("用户注册");
setSize(400,300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口时退出程序
setLocationRelativeTo(null);//窗口在屏幕中居中显示(参数null表示相对于屏幕居中)
JPanel mainPanel=new JPanel(new GridLayout(6,2,10,10));
//JPanel:容器组件,用于承载其他组件(如输入框、按钮),方便统一布局
//GridLayout(6,2,10,10):网格布局,6行2列,组件之间水平间距10像素,垂直间距10像素
mainPanel.add(new JLabel("用户名:"));
//添加文本标签(提示用户输入内容)
usernameField=new JTextField();
//初始化用户名输入框(默认单行,可直接输入文本)
mainPanel.add(usernameField);
//将输入框添加到主面板的下一列(网格布局自动按照行/列排列)
mainPanel.add(new JLabel("密码:"));
//密码提示标签
passwordField=new JPasswordField();
//初始化密码输入框(输入内容自动转为星号,圆点)
mainPanel.add(passwordField);
//添加到主面板
mainPanel.add(new JLabel("性别:"));
//性别提示标签
JPanel genderPanel=new JPanel();
//子面板:专门承载单选按钮(避免与其他组件布局冲突)
ButtonGroup genderGroup=new ButtonGroup();
//单选按钮组:确保组内按钮互斥
maleRadio=new JRadioButton("男");
femaleRadio=new JRadioButton("女");
genderGroup.add(maleRadio);
genderGroup.add(femaleRadio);
genderPanel.add(maleRadio);
genderPanel.add(femaleRadio);
mainPanel.add(genderPanel);
//子面板添加到主面板(占满1列空间)
//爱好
mainPanel.add(new JLabel("爱好:"));
//爱好提示标签
JPanel hobbyPanel=new JPanel();
sportCheck=new JCheckBox("运动");
//运动:复选框
readCheck=new JCheckBox("阅读");
musicCheck=new JCheckBox("音乐");
hobbyPanel.add(sportCheck);
//复选框添加到子面板
hobbyPanel.add(readCheck);
hobbyPanel.add(musicCheck);
mainPanel.add(hobbyPanel);
//子面板添加到主面板
mainPanel.add(new JLabel());
//空标签:网格布局是6行2列,此处占第一列位置,使按钮居中(美观);
JButton registerBtn=new JButton("注册");
//注册按钮
registerBtn.addActionListener(new RegisterListener());
//给按钮绑定事件监听器
mainPanel.add(registerBtn);
add(mainPanel);//将主面板添加到窗口
setVisible(true);//设置窗口可见(Swing组件默认不可见,必须调用此方法)
}
private class RegisterListener implements ActionListener{
@Override
public void actionPerformed(ActionEvent e) {
//按钮点击时触发的核心方法
//1.获取用户名:通过JTextField的getText()方法
String username=usernameField.getText();
//2.获取密码:将char[]数组转为String(getPassword()返回char[],更安全)
String password=new String(passwordField.getPassword());
String gender=maleRadio.isSelected()?"男":
femaleRadio.isSelected()?"女":"未选择";
//4.获取爱好:StringBuilder拼接选中的爱好(避免频繁创建String对象)
StringBuilder hobbies=new StringBuilder();
if(sportCheck.isSelected())hobbies.append("运动");
if(readCheck.isSelected())hobbies.append("音乐");
if(hobbies.length()==0)hobbies.append("无");
System.out.println("注册信息:");
System.out.println("用户名:"+username);
System.out.println("密码:"+password);
System.out.println("性别:"+gender);
System.out.println("爱好:"+hobbies.toString());
}
}
public static void main(String []args) {
//Swing组件必须在EDT(事件调度线程)中创建,避免线程安全问题
SwingUtilities.invokeLater(RegistrationForm::new);
//等价于:new RegistrationForm(),但通过invokeLater确保在EDT线程内执行
}
}
1528

被折叠的 条评论
为什么被折叠?



