实现用户注册界面
设计实现用户注册界面,每组将实验报告提交至学习通,要求实验报告中包含功能展示与源代码。
要求:用户输入账号、密码、确认密码、性别、生日、兴趣、备注。其中带*为必填项。单击“注册”按钮,判断必填项是否填完整,两次密码是否输入一致。若注册信息有误,在左下角提示错误原因(选做);若注册信息完整、正确,提示注册成功,将用户输入的信息打印到屏幕。按重置按钮将所有输入内容清空(必做)。
效果图
自认为很丑,但是功能认为还挺全
以下为代码实现,本人做出来的界面很丑,功能实现就可以。
这里是用于判断性别的gender类
public class Gender {
private Object genger;
public Gender() {
}
@Override
public String toString() {
return "Gender{" +
"genger=" + genger +
'}';
}
public Object getGenger() {
return genger;
}
public void setGenger(Object genger) {
this.genger = genger;
}
public Gender(Object genger) {
this.genger = genger;
}
}
代码内有注释。
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class Test04 {
public static void main(String[] args) {
//这里创建三个列表用于后期接收传来的内容,在注册功能中比对密码的正确性
List username = new ArrayList();
List password1 = new ArrayList();
List password2 = new ArrayList();
//这里是性别
Gender genderint = new Gender(null);
//这里是生日
List yearshuzu = new ArrayList();
List monthshuzu = new ArrayList();
List dayshuzu = new ArrayList();
//这里是兴趣
List xingqushuzu =new ArrayList();
JFrame frame = new JFrame();
frame.setSize(1000,1000);
//这里创建JLabel 放置用户名密码
JLabel l1 = new JLabel("用户名");
JLabel l2 = new JLabel("密 码 ");
JLabel l3 = new JLabel("");
//这里放置注册重置
JButton b1 = new JButton("注册");
JButton b2 = new JButton("重置");
//创建一个用户名的text
JTextField t1 = new JTextField(10);
//创建密码的jpassword
JPasswordField pf1 = new JPasswordField(10);
JPanel p1 = new JPanel(new FlowLayout());//面板p1流式布局
p1.add(l1);p1.add(t1); //存放用户名和文本框
JPanel p2 = new JPanel(new FlowLayout());//面板p2流式布局
p2.add(l2);p2.add(pf1); //存放密码和密码框
//这里放置确认密码功能
JPanel p6 = new JPanel(new FlowLayout());
//放置确认密码
JPasswordField pf2 = new JPasswordField(10);
p6.add(new JLabel("确认密码"));p6.add(pf2);
JPanel p3 = new JPanel(new FlowLayout());//面板p3流式布局
p3.add(b1);p3.add(b2); //存放注册和重置按钮
//这里存放性别
JLabel labelgenger = new JLabel("性别:");
JLabel empty = new JLabel();
ButtonGroup gender = new ButtonGroup();
JRadioButton man = new JRadioButton("男");
JRadioButton woman = new JRadioButton("女");
//点击男性时候 把性别参数改为1
//这里是男性按钮
man.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//外部创建了一个类Gender 其中有一个Object参数表示男女 0代表女 1代表男
genderint.setGenger(1);
System.out.println(genderint.getGenger());
}
});
//这里是女性按钮
//点击时候设置gender 类的 genderint实例变量的gender属性为0
woman.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
genderint.setGenger(0);
System.out.println(genderint.getGenger());
}
});
gender.add(man);gender.add(woman);
JPanel p7 = new JPanel(new GridLayout(2, 2));
p7.add(labelgenger);
p7.add(empty);
p7.add(man);
p7.add(woman);
//这里存放生日
JPanel p8 = new JPanel(new FlowLayout());
JLabel labelBirth = new JLabel("生日:");
//这里循环创建列表
//然后转换为数组
List<String> year1 = new ArrayList();
//先添加一个按钮让人选择,如果没有选择会弹出没有选择生日
year1.add("---请选择---");
for (int i = 2021;i>=1950;i--){
year1.add(String.valueOf(i));
}
String[] year = year1.toArray(new String[year1.size()]);
List<String> month1 = new ArrayList();
month1.add("---请选择---");
for (int i = 0;i<12;i++){
month1.add(String.valueOf(i+1));
}
String[] month = month1.toArray(new String[month1.size()]);
List<String> day1 = new ArrayList<>();
day1.add("---请选择---");
for (Integer i = 1; i< 30;i++){
day1.add(String.valueOf(i));
}
String[] day = day1.toArray(new String[month1.size()]);
//这里把转换好的数组放进去
JComboBox<String> birthyear = new JComboBox<>(year);
JComboBox<String> birthmonth = new JComboBox<>(month);
JComboBox<String> birthday = new JComboBox<>(day);
p8.add(labelBirth);
p8.add(birthyear);
p8.add(birthmonth);
p8.add(birthday);
//给按键添加监听
birthyear.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
//如果他的状态为被选中
if (e.getStateChange() == 1){
//将选中的这个item转化为String赋值给yearshuzu
//以下同理
yearshuzu.add(String.valueOf(e.getItem()));
System.out.println(yearshuzu.get(0));
}
}
});
birthmonth.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == 1){
monthshuzu.add(String.valueOf(e.getItem()));
System.out.println(monthshuzu.get(0));
}
}
});
birthday.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (e.getStateChange() == 1){
dayshuzu.add(String.valueOf(e.getItem()));
System.out.println(dayshuzu.get(0));
}
}
});
//这里存放兴趣
JCheckBox jc1 = new JCheckBox("抽烟");
JCheckBox jc2 = new JCheckBox("喝酒");
JCheckBox jc3 = new JCheckBox("烫头");
JCheckBox jc4 = new JCheckBox("泡吧");
JCheckBox jc5 = new JCheckBox("飙车");
JCheckBox jc6 = new JCheckBox("打游戏");
JCheckBox jc8 = new JCheckBox("网恋");
JCheckBox jc9 = new JCheckBox("做舔狗");
jc9.setForeground(Color.red);
JPanel p9 = new JPanel(new GridLayout(2,4));
p9.add(jc1);
p9.add(jc2);
p9.add(jc3);
p9.add(jc4);
p9.add(jc5);
p9.add(jc6);
p9.add(jc8);
p9.add(jc9);
jc1.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
//如果这个是被选中的
if (jc1.isSelected() == true){
//将这个文本添加到xingqushuzu里面
xingqushuzu.add(jc1.getText());
//如果没有选中
}else if (jc1.isSelected()==false){
//将这个文本删除,因为可能有人点了勾勾 又取消了勾勾
//以下同理
xingqushuzu.remove(jc1.getText());
}
}
});
jc2.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (jc2.isSelected() == true){
xingqushuzu.add(jc2.getText());
}else if (jc2.isSelected()==false){
xingqushuzu.remove(jc2.getText());
}
}
});
jc3.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (jc3.isSelected() == true){
xingqushuzu.add(jc3.getText());
}else if (jc3.isSelected()==false){
xingqushuzu.remove(jc3.getText());
}
}
});
jc4.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (jc4.isSelected() == true){
xingqushuzu.add(jc4.getText());
}else if (jc4.isSelected()==false){
xingqushuzu.remove(jc4.getText());
}
}
});
jc5.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (jc5.isSelected() == true){
xingqushuzu.add(jc5.getText());
}else if (jc5.isSelected()==false){
xingqushuzu.remove(jc5.getText());
}
}
});
jc6.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (jc6.isSelected() == true){
xingqushuzu.add(jc6.getText());
}else if (jc6.isSelected()==false){
xingqushuzu.remove(jc6.getText());
}
}
});
jc8.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (jc8.isSelected() == true){
xingqushuzu.add(jc8.getText());
}else if (jc8.isSelected()==false){
xingqushuzu.remove(jc8.getText());
}
}
});
jc9.addItemListener(new ItemListener() {
@Override
public void itemStateChanged(ItemEvent e) {
if (jc9.isSelected() == true){
xingqushuzu.add(jc9.getText());
}else if (jc9.isSelected()==false){
xingqushuzu.remove(jc9.getText());
}
}
});
JPanel p4 = new JPanel();//面板p4默认流式布局
l3.setForeground(Color.red);
p4.add(l3); //存放提示标签
//这里是备注 注册成功将信息显示在此面板上
//以下是一系列的设置,设置滚动换行什么的
JPanel p5 = new JPanel(new FlowLayout());
JTextArea jTextArea1 = new JTextArea(5, 20);
jTextArea1.setLineWrap(true);
JScrollPane jScrollPane = new JScrollPane(jTextArea1);
jScrollPane.setBorder(BorderFactory.createLoweredBevelBorder());
p5.add(jScrollPane);
//这里给注册和重置按钮监听
b1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
//首先把提示标签设置为空 以免上一次注册失败,留下来的标签还在
l3.setText("");
System.out.println("这里是注册");
//这里如果用户名文本框的取值为空,令他为null 不然就是username = "";
if (t1.getText().equals("")){
username.add(0,null);
}else {
//如果取值不为空,就让他得到文本框中的内容
username.add(0,t1.getText());
}
//将密码栏中的信息得到,添加给passwrod数组 用于确认密码
password1.add(0,new String(pf1.getPassword()));
password2.add(0,new String(pf2.getPassword()));
//这里是为了检查数据是否和我输入的一致
System.out.println(username.get(0));
System.out.println(password1.get(0));
System.out.println(password2.get(0));
System.out.println(yearshuzu.get(0));
System.out.println(monthshuzu.get(0));
System.out.println(dayshuzu.get(0));
System.out.println(genderint.getGenger());
System.out.println(xingqushuzu);
/*
if (password1[0].equals(password2[0])){
System.out.println("yes");
}else {
System.out.println("no");
}*/
//这里是将兴趣数组中的null值删除,好像没什么用了 一开始用数组需要用到它,list好像没啥用
//试了一下确实没有用了
/*for (int i = 0; i < xingqushuzu.size(); i++) {
if (xingqushuzu.get(i) == null){
xingqushuzu.remove(i);
}
}*/
System.out.println(username);
//这里是判断需要填的信息,如果这个信息是null 就走下面的方法
//=======================这里要注意===================
//=======================这里要注意===================
//password1.get(0) 和 password2.get(0) 之间不能用 == 比较, 这样比的是内存地址,因为没有重写方法,所以要用equals函数来比较内容
//=======================这里要注意===================
//=======================这里要注意===================
//=======================这里要注意===================
if (username.get(0)!=null && password1.get(0).equals(password2.get(0)) && yearshuzu.get(0)!=null && monthshuzu.get(0)!=null && dayshuzu.get(0)!= null && genderint.getGenger()!= null){
System.out.println("注册成功");
//如果性别的值为1 就打印男 这里的"\r\n"是换行 手动换一下行 不然不好看
if (genderint.getGenger().equals(1)){
jTextArea1.setText("注册成功" + "\r\n"+"用户名为:"+username.get(0) + "\r\n"+"密码为:"+password1.get(0)+ "\r\n"+"兴趣为:"+xingqushuzu+
"\r\n" + "生日为:"+yearshuzu.get(0)+"-"+monthshuzu.get(0)+"-"+dayshuzu.get(0)+"\r\n"+"性别为:男");
} //如果性别的值为1 就打印男else if (genderint.getGenger().equals(0))
//如果性别的值为1 就打印女
else if (genderint.getGenger().equals(0)){
jTextArea1.setText("注册成功" + "\r\n"+"用户名为:"+username.get(0) + "\r\n"+"密码为:"+password1.get(0)+ "\r\n"+"兴趣为:"+xingqushuzu+
"\r\n" + "生日为:"+yearshuzu.get(0)+"-"+monthshuzu.get(0)+"-"+dayshuzu.get(0)+"\r\n"+"性别为:女");
}
//这里是判断哪里错了 如果哪里错了 就告诉他哪里错了
}else if (username.get(0) == null){
l3.setText("用户名不能为空");
}
else if (genderint.getGenger() == null){
l3.setText("性别不能为空");
}else if (password1.get(0) == null){
l3.setText("密码不能为空");
}else if (!password1.get(0).equals(password2.get(0))){
l3.setText("密码输入不同");
}else if (yearshuzu.get(0) == null){
l3.setText("生日的年不能为空");
}else if (monthshuzu.get(0) == null){
l3.setText("月不能为空");
}else if (dayshuzu.get(0) == null){
l3.setText("日不能为空");
}
else {
l3.setText("我也不知道哪里错了");
}
}
});
//这里是重置按钮
//直接清空所有的内容
//并且设置所有的文本框清空
b2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
username.removeAll(username);
password1.removeAll(password1);
password2.removeAll(password2);
genderint.setGenger(null);
yearshuzu.remove(yearshuzu);
monthshuzu.removeAll(monthshuzu);
dayshuzu.removeAll(dayshuzu);
xingqushuzu.removeAll(xingqushuzu);
t1.setText("");
System.out.println("重置");
pf1.setText("");
pf2.setText("");
jc1.setSelected(false);
jc2.setSelected(false);
jc3.setSelected(false);
jc4.setSelected(false);
jc5.setSelected(false);
jc6.setSelected(false);
jc8.setSelected(false);
jc9.setSelected(false);
jTextArea1.setText("");
}
});
frame.setLayout(new GridLayout(6,2));//设置网格式布局管理器,将组件垂直摆放在一列
//按照顺序添加 JPanel()
//用户名
frame.add(p1);
//生日
frame.add(p8);
//密码
frame.add(p2);
//兴趣
frame.add(p9);
//确认密码
frame.add(p6);
//空白panel
frame.add(new JPanel());
//性别
frame.add(p7);
//备注
frame.add(p5);
//登录重铸
frame.add(p3);
frame.add(p4);
frame.pack();
frame.setTitle("注册器");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}