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);
}

swing 实现用户登录注册界面(不使用数据库)的更多相关文章

  1. 注册登录于一体的 用户登录注册界面(php)

    <!DOCTYPE HTML><html> <head> <script type="text/javascript" src=" ...

  2. HTML登录注册界面怎么制作?

    在没有学习CSS样式的前提下,是如何做一个简单的注册界面的. 一.表单标签(form) 首先我们先写一个<form></form>的标签,form标签属于表单标签,通常我们的登 ...

  3. javaweb学习总结(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  4. 使用Boostrap框架写一个登录\注册界面

    Bootstrap是一个Web前端开发框架,使用它提供的css.js文件可以简单.方便地美化HTML控件.一般情况下,对控件的美化需要我们自己编写css代码,并通过标签选择器.类选择器.ID选择器为指 ...

  5. JavaWeb学习 (二十一)————基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  6. Java Spring+Mysql+Mybatis 实现用户登录注册功能

    前言: 最近在学习Java的编程,前辈让我写一个包含数据库和前端的用户登录功能,通过看博客等我先是写了一个最基础的servlet+jsp,再到后来开始用maven进行编程,最终的完成版是一个 Spri ...

  7. 基于Servlet+JSP+JavaBean开发模式的用户登录注册

    http://www.cnblogs.com/xdp-gacl/p/3902537.html 一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBea ...

  8. javaweb(二十二)——基于Servlet+JSP+JavaBean开发模式的用户登录注册

    一.Servlet+JSP+JavaBean开发模式(MVC)介绍 Servlet+JSP+JavaBean模式(MVC)适合开发复杂的web应用,在这种模式下,servlet负责处理用户请求,jsp ...

  9. Python 实现简单的登录注册界面

    Python 实现简单的登录注册界面 注意:编写代码之前需要导入很重要的包 import tkinter as tk import pickle from tkinter import message ...

随机推荐

  1. MySQL时间格式TIMESTAMP和DATETIME的区别

    时区,timestamp会跟随设置的时区变化而变化,而datetime保存的是绝对值不会变化 自动更新,insert.update数据时,可以设置timestamp列自动以当前时间(CURRENT_T ...

  2. .NET 固定时间窗口算法实现(无锁线程安全)

    一.前言 最近有一个生成 APM TraceId 的需求,公司的APM系统的 TraceId 的格式为:APM AgentId+毫秒级时间戳+自增数字,根据此规则生成的 Id 可以保证全局唯一(有 N ...

  3. Solution -「洛谷 P4372」Out of Sorts P

    \(\mathcal{Description}\)   OurOJ & 洛谷 P4372(几乎一致)   设计一个排序算法,设现在对 \(\{a_n\}\) 中 \([l,r]\) 内的元素排 ...

  4. Solution -「洛谷 P5787」「模板」二分图(线段树分治)

    \(\mathcal{Description}\)   Link.    \(n\) 个结点的图,\(m\) 条形如 \((u,v,l,r)\) 的边,表示一条连接 \(u\) 和 \(v\) 的无向 ...

  5. Linux编译安装升级bash5.1

    线上服务器有次做漏洞扫描时,被扫描出有bash漏洞.平时还是比较少遇到有bash的漏洞,好在编译升级比较简单. 测试环境系统:CentOS.Ubuntu 一.下载官网最新bash版本 bash官网下载 ...

  6. EMNLP 2017 | Sparse Communication for Distributed Gradient Descent

    通过将分布式随机梯度下降(SGD)中的稠密更新替换成稀疏更新可以显著提高训练速度.当大多数更新接近于0时,梯度更新会出现正偏差,因此我们将99%最小更新(绝对值)映射为零,然后使用该稀疏矩阵替换原来的 ...

  7. 【Python自动化Excel】pandas操作Excel的“分分合合”

    话说Excel数据表,分久必合.合久必分.Excel数据表的"分"与"合"是日常办公中常见的操作.手动操作并不困难,但数据量大了之后,重复性操作往往会令人崩溃. ...

  8. Iterator迭代

    今天在牛客网练题的时候,出现了Iterator的题,实在想不起来这是什么,于是去查阅了相关资料,顺便自己去IDEA试了一下.总结了一些相关知识如下: 什么是Iterator? 我们来看看菜鸟教程里的解 ...

  9. 案例八:shell自动化管理账本脚本

    该脚本目的帮助管理员创建账号.删除账号.锁定账号.解锁账号. #!/bin/bash #filename: #author: #date:2018-6-6 echo "用户管理程序" ...

  10. 谷歌集群数据 clusterdata-2011-2 Cluster workload traces

    谷歌集群数据 clusterdata-2011-2 https://github.com/google/cluster-data/blob/master/ClusterData2011_2.md 链接 ...