通过登录与注册的学习,我们主要掌握java中的界面的创建、监听器、接口、继承等相关知识点。拿QQ界面举例(效果图如下):
完成如上效果,首先,我们需要先创建界面(登录界面、注册界面、登录成功后的主界面)、一些填错信息弹窗;其次,我们需要考虑界面的交互(如,通过登录界面的注册功能按钮成功转到注册界面);最后,我们需要考虑信息的存贮(如,注册信息与登录信息的关联)
创建界面
创建登录界面
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,···){}
- 继承接口需要重新写接口中的所有抽象方法