通过登录与注册的学习,我们主要掌握java中的界面的创建、监听器、接口、继承等相关知识点。拿QQ界面举例(效果图如下):

java的注册与登录实现的 java登录注册_List

 完成如上效果,首先,我们需要先创建界面(登录界面、注册界面、登录成功后的主界面)、一些填错信息弹窗;其次,我们需要考虑界面的交互(如,通过登录界面的注册功能按钮成功转到注册界面);最后,我们需要考虑信息的存贮(如,注册信息与登录信息的关联)

创建界面

创建登录界面

1、创建窗体

//添加窗体
        JFrame jf = new JFrame();//创建窗体对象,多次使用需声明创建
        jf.setTitle("QQ登录界面");
        jf.setBounds(300, 300, 550, 500);//设置窗体大小
        jf.setDefaultCloseOperation(3);//关闭窗口,结束程序

2、创建组件对象,并添入窗体/面板中(若有面板,面板需放入窗体)

//创建面板,面板布局为空——可以自定义面板中组件的位置(用setBound)
		JPanel jpanel = new JPanel();
		jpanel.setLayout(null);
        //面板放入窗体中,窗体使用流式布局,设置大小只能用此方式
		jpanel.setPreferredSize(new Dimension(550, 300));
		jpanel.setBackground(Color. white);
        //将面板放入窗体中
		jf.add(jpanel);
  • 添加组件时,需要添加布局管理器(流式布局管理器——从上到下添加组件)
//流式布局管理器
		FlowLayout flow = new FlowLayout();
		//设置窗体为流式布局
		jf.setLayout(flow);
  • 添加图片时需要添加标签,并将图片放入标签中
//载入背景图片
		ImageIcon image1=new ImageIcon("E:\\图片\\背景.jpg");
		//加标签
		JLabel jla = new JLabel(image1);
		jf.add(jla);
		Dimension jl = new Dimension(550,200);
		jla.setPreferredSize(jl);
  • 添加的按钮,后续应添加动作监听器方法
//加按钮监听器,得创建对象
		UserUIListener uilisten = new UserUIListener();
		btn1.addActionListener(uilisten);//按钮btn1,btn2中加入动作监听器
		btn2.addActionListener(uilisten);

3、设置窗体可视化

//设置可见
		jf.setVisible(true);

(若要使用画笔JPanel,其只能加在可视化后面)

4、添加主方法(创建类对象并调用方法)

创建注册界面

1、创建窗体

2、创建组件对象,并添加入窗体/面板中(若有面板,面板需放入窗体)

3、设置窗体可视化 -------(所有界面均如此)

界面的交互

信息的存储

当在登录主界面点击“注册”后,弹出注册界面,在注册界面输入注册信息,点击“确定注册”按钮,此时获取注册界面上的信息,将注册信息与已存在用户信息(存放入数组中)进行比对。若注册信息存在,弹出重新注册界面;若注册信息不存在,则将注册信息存入数组中。

在登录时,需要获取登录界面上的登录信息,将信息与已存在用户信息(数组)进行比对,比对成功则转跳登录成功的主界面。

具体步骤

1、首先在登录界面,对“登录”、“注册”按钮添加监听器,首次使用需要创建监听器对象,后续使用调用即可。

//加按钮监听器,得创建对象
		UserUIListener uilisten = new UserUIListener();
		btn1.addActionListener(uilisten);
		btn2.addActionListener(uilisten);

2、创建接口,在接口中创建数组,用来存储用户信息 

public class UserUIListener implements ActionListener{
      JTextField nameln = null;
	  JTextField pwdln = null;
	  JTextField uField = null;
	  JTextField pField = null;
      //定义一个数据结构ArrayList
	  ArrayList<User> userList = new ArrayList();
 
	  //将数据打包为一个list对象
	  User user = new User(uField,pField);
	  userList.add(user);
		}
	}
}

3、在接口中,加入监听事件,判断所点击的按钮究竟时注册还是登录(通过获取按钮上的文字进行判断) 。

public void actionPerformed(ActionEvent e) {
		//判断点击得是哪个按钮
		String actionname = e.getActionCommand();
		System.out.println(actionname + "被点击了"+nameln);
		
		if(actionname.equals("登录")) {
			
		}else if(actionname.equals("注册")){
			
		}else if(actionname.equals("确定注册")) {
		
        }

4、在接口监听事件,if语句中,当name = “登录”时,进行遍历数组,看是否存在用户信息

//看是否已注册
			for(int i = 0;i < userList.size();i++){
				//查找所有已注册账户(遍历)
				User getuser = userList.get(i);
				//判断遍历账户是否与注册账户一致,构造
				System.out.println(uField);
				if(getuser.name.equals(uField)) {
					//比较密码是否相同
					if(getuser.pwd.equals(pField)) {
						JOptionPane.showMessageDialog(null, "登录成功!");
					return;
					}
				}
			}
			JOptionPane.showMessageDialog(null, "未查到此用户,请先注册!");

5、 在接口监听事件,if语句中,当name = “注册”时,转跳注册界面

RegisterUI reg = new RegisterUI();
			reg.uilisten = this;
			reg.initR();

 5、 在接口监听事件,if语句中,当name = “确定注册”时,进行判断所注册信息是否已存在。

//注册信息遍历存储
			System.out.println(actionname + "确定注册被点击了");
			//判断是否获得文本框内容
			uStr = uField.getText();
			pStr = pField.getText();
			System.out.println ("用户名:" + uField);
			System.out.println ("密    码:" + pField);
			//查找所输入账户是否已存在
			for(int i = 0;i < userList.size();i++){
				//查找所有已注册账户(遍历)
				User getuser = userList.get(i);
				//判断遍历账户是否与注册账户一致
				if(getuser.name.equals(uField)) {
					JOptionPane.showMessageDialog(null, "该用户已存在!");
					return;
				}
			}
            JOptionPane.showMessageDialog(null, "恭喜注册为本平台的第" + userList.size() + "位用户!");

监听器

1、概念:当所监听的对象的事件、动态发生改变时,执行相应的功能代码。

2、功能:点击按钮后,带动相应程序(界面交互)

3、用法:

  • 事件源:当前动作所发生的组件
  • 监听器:动作监听器方法(addActionListener)
  • 绑定事件处理类

(创建监听器对象 只能创建一次,后续使用的时候,调用即可)

4、类型:

MouseListener(鼠标点击), ActionListener(动作监听), MouseMotionListener(鼠标移动)

接口

1、概念:接口是一种数据类型——引用类型/自定义类型

  • 引用类型/自定义类型:类(class)、数组、接口(interface)
  • 基本数据类型:整型(byte/short/int/long)、浮点型(flot/double)、字符型(char)、布尔型(boolean)

2、用法

  • 继承接口:public clas 子类 implements 接口1(,接口2,···){}
  • 继承接口需要重新写接口中的所有抽象方法