php中文网 | cnphp.com

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 545|回复: 0

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

[复制链接]

3142

主题

3152

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

UID
1
威望
0
积分
7956
贡献
0
注册时间
2021-4-14
最后登录
2024-11-22
在线时间
763 小时
QQ
发表于 2022-3-24 08:28:39 | 显示全部楼层 |阅读模式
先说一下具体实现的功能吧:用户注册后会将注册的对象存入内存中,登录时会遍历注册的对象列表,判断是否登录成功;

登录和注册界面:
image.png
本次实验分为六个模块

登录界面 (两个输入框,两个按钮)
注册界面 (两个输入框,两个按钮)
监听器 (跳转页面,弹出提示框等功能)
登录输入类 (用来把登陆界面输入框内的数据传给监听器,让监听器判断是否可以成功登录)
注册输入类 (用来把注册界面输入框内的数据传给监听器,便于监听器创建新的用户类,存入userList中)
用户类
实现过程
登录界面
[mw_shl_code=applescript,true]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();
    }
}
[/mw_shl_code]
注册界面
[mw_shl_code=applescript,true]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);
    }
   
}
[/mw_shl_code]
监听器
[mw_shl_code=applescript,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); //退出
        }

    }
}
[/mw_shl_code]
登录输入类
[mw_shl_code=applescript,true]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;
    }
}

[/mw_shl_code]
注册输入类
[mw_shl_code=applescript,true]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;
    }
}
[/mw_shl_code]
用户类
[mw_shl_code=applescript,true]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;
    }
}
[/mw_shl_code]
遇到的问题
①给button加上Dimension之后,button里的字变成了...,原因是Dimensoin的大小设置的太小了。
②登陆界面和注册界面的loginListen是两个对象,如何将注册页面的监听器的List集合传给登录界面的监听器?
解决方法:我们可以使用一个监听器对象,将登陆界面的监听器作为参数传入注册界面。
③监听器的方法中,使用this来表示监听器本身,代码实现:
[mw_shl_code=applescript,true]if(action.equals("注册")){
    RegistUI registUI = new RegistUI();
    registUI.initUI(this);
}
[/mw_shl_code]





上一篇:C 如何将输出的地址转化为十进制数
下一篇:一文让你明白Redis主从同步
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|php中文网 | cnphp.com ( 赣ICP备2021002321号-2 )

GMT+8, 2024-11-22 09:58 , Processed in 0.272742 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

申明:本站所有资源皆搜集自网络,相关版权归版权持有人所有,如有侵权,请电邮(fiorkn@foxmail.com)告之,本站会尽快删除。

快速回复 返回顶部 返回列表