swing实现用户登录注册界面(不使用数据库)

博客 动态
0 278
羽尘
羽尘 2022-03-24 02:57:04
悬赏:0 积分 收藏

swing 实现用户登录注册界面(不使用数据库)

swing 实现用户登录注册界面(不使用数据库)

实现的功能

  • 先说一下具体实现的功能吧:用户注册后会将注册的对象存入内存中,登录时会遍历注册的对象列表,判断是否登录成功;

  • 登录和注册界面:

  • 本次实验分为六个模块

    • 登录界面 (两个输入框,两个按钮)
    • 注册界面 (两个输入框,两个按钮)
    • 监听器 (跳转页面,弹出提示框等功能)
    • 登录输入类 (用来把登陆界面输入框内的数据传给监听器,让监听器判断是否可以成功登录)
    • 注册输入类 (用来把注册界面输入框内的数据传给监听器,便于监听器创建新的用户类,存入userList中)
    • 用户类

实现过程

  • 登录界面
import javax.swing.*;import java.awt.*;public class LoginUI {    public void initUI(){        JFrame jf = new JFrame("登录界面");        jf.setSize(500,700);        jf.setLocationRelativeTo(null);        jf.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);                FlowLayout flow = new FlowLayout(); //使用流式布局        jf.setLayout(flow);                //注意调整图片尺寸,图片比框体大的话会无法显示,此处图片尺寸为500*498。        // 我是使用WPS会员进行调整的,欢迎网友提出更好的方法。        ImageIcon image = new ImageIcon("C:\\Users\\13630\\Pictures\\衡水二中.jpg");        JLabel imageJla = new JLabel(image);                JLabel nameJla = new JLabel("账号:");        JLabel pwdJla = new JLabel("密码:");                //为输入框设置大小        Dimension dim = new Dimension(400,35);         JTextField nameInput = new JTextField();        JPasswordField pwdInput = new JPasswordField();                nameInput.setPreferredSize(dim);         pwdInput.setPreferredSize(dim);        JButton btn1 = new JButton("登录");        JButton btn2 = new JButton("注册");                jf.add(imageJla);        jf.add(nameJla);        jf.add(nameInput);        jf.add(pwdJla);        jf.add(pwdInput);        jf.add(btn1);        jf.add(btn2);        //创建监听器        LoginListener loginListener = new LoginListener();        //将输入框传给监听器的成员变量loginInput        loginListener.loginInput.setNameInput(nameInput);        loginListener.loginInput.setPwdInput(pwdInput);        //给按钮加上监听器        btn1.addActionListener(loginListener);        btn2.addActionListener(loginListener);        jf.setVisible(true);  //可视化    }    public static void main(String[] args) {        new LoginUI().initUI();    }}
  • 注册界面
import javax.swing.*;import java.awt.*;/** * 设计逻辑与登录界面基本相同 */public class RegistUI {    public void initUI(LoginListener loginListener){        JFrame jf = new JFrame("注册界面");        jf.setSize(500,700);        jf.setLocationRelativeTo(null);        jf.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);        FlowLayout flow = new FlowLayout();        jf.setLayout(flow);                ImageIcon image = new ImageIcon("C:\\Users\\13630\\Pictures\\衡水二中.jpg");        JLabel nameJla = new JLabel("请输入你的账号:");        JLabel pwdJla = new JLabel("请输入你的密码:");        JLabel imageJla = new JLabel(image);        Dimension dim = new Dimension(340,35);                JTextField nameInput = new JTextField();        JPasswordField pwdInput = new JPasswordField();        nameInput.setPreferredSize(dim);        pwdInput.setPreferredSize(dim);        JButton btn1 = new JButton("确定");        JButton btn2 = new JButton("取消");                jf.add(imageJla);        jf.add(nameJla);        jf.add(nameInput);        jf.add(pwdJla);        jf.add(pwdInput);        jf.add(btn1);        jf.add(btn2);        //将输入框传给监听器的成员变量registInput        loginListener.registInput.setNameInput(nameInput);        loginListener.registInput.setPwdInput(pwdInput);                btn1.addActionListener(loginListener);        btn2.addActionListener(loginListener);        jf.setVisible(true);    }    }
  • 监听器
import javax.swing.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.ArrayList;public class LoginListener implements ActionListener {    //为了将两个输入框中的内容传进监听器中,我们将两个输入框封装成一个类,作为监听器的成员变量,同时在登录和注册界面中,将输入框传入该类。    RegistInput registInput = new RegistInput();     LoginInput loginInput = new LoginInput(); //同上    ArrayList<User> userList = new ArrayList<>();    @Override    public void actionPerformed(ActionEvent e){        String action = e.getActionCommand();                if(action.equals("登录")){            //没有被注册时,直接输出:用户名不存在!!            if(userList.size()==0){                JOptionPane.showMessageDialog (null, "用户名不存在!!");            }            //将输入框中的字符串取出来放在name,pwd中            String name = loginInput.getNameInput().getText();            String pwd = loginInput.getPwdInput().getText();            boolean nameExist = false; //用nameExist记录在遍历过程中,是否找到登录时使用的用户名            //遍历List集合,判断能否登录成功或登录失败的原因            for(User u : userList){                if(u.name.equals(name)){                    nameExist = true;                    if(u.pwd.equals(pwd)){                        JOptionPane.showMessageDialog (null, "登录成功!!");                        break;                    }else{                        JOptionPane.showMessageDialog (null, "密码错误!!");                        break;                    }                }            }          if(!nameExist){            JOptionPane.showMessageDialog (null, "用户名不存在!!");          }        }else if(action.equals("注册")){            RegistUI registUI = new RegistUI();            registUI.initUI(this);        }else if(action.equals("确定")){            //输入框中的数据创建一个user对象,加入到List集合中            String name = registInput.getNameInput().getText();            String pwd = registInput.getPwdInput().getText();            User user = new User(name,pwd);            userList.add(user);            JOptionPane.showMessageDialog (null, "注册成功!!");        }else if(action.equals("取消")){            System.exit(0); //退出        }    }}
  • 登录输入类
import javax.swing.*;public class LoginInput {    JTextField nameInput = null;    JPasswordField pwdInput = null;    public JTextField getNameInput() {        return nameInput;    }    public void setNameInput(JTextField nameInput) {        this.nameInput = nameInput;    }    public JPasswordField getPwdInput() {        return pwdInput;    }    public void setPwdInput(JPasswordField pwdInput) {        this.pwdInput = pwdInput;    }}
  • 注册输入类
import javax.swing.*;public class RegistInput {    JTextField nameInput = null;    JPasswordField pwdInput = null;    public JTextField getNameInput() {        return nameInput;    }    public void setNameInput(JTextField nameInput) {        this.nameInput = nameInput;    }    public JPasswordField getPwdInput() {        return pwdInput;    }    public void setPwdInput(JPasswordField pwdInput) {        this.pwdInput = pwdInput;    }}
  • 用户类
public class User {    String name;    String pwd;    User(String name,String pwd){        this.name = name;        this.pwd = pwd;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public String getPwd() {        return pwd;    }    public void setPwd(String pwd) {        this.pwd = pwd;    }}

遇到的问题

  • ①给button加上Dimension之后,button里的字变成了...,原因是Dimensoin的大小设置的太小了。
  • ②登陆界面和注册界面的loginListen是两个对象,如何将注册页面的监听器的List集合传给登录界面的监听器?
  • 解决方法:我们可以使用一个监听器对象,将登陆界面的监听器作为参数传入注册界面。
  • ③监听器的方法中,使用this来表示监听器本身,代码实现:
if(action.equals("注册")){    RegistUI registUI = new RegistUI();    registUI.initUI(this);}
posted @ 2022-03-23 23:56 classic123 阅读(1) 评论(0) 编辑 收藏 举报
回帖
    羽尘

    羽尘 (王者 段位)

    2335 积分 (2)粉丝 (11)源码

     

    温馨提示

    亦奇源码

    最新会员