1.概念
集合框架其实指的就是容器,能将大量的相同类型的元素进行统一封装(回想高级画板重绘的知识)
Java集合框架是Java语言的重要组成部分,封装了大量的数据结构的实现(我们前面自定义队列大体上实现了和ArrayList同样的功能,集合框架中还有很多的类和工具,它们有各自的优点的缺点,看时机情况需要,可以进行选择)
2.Collection和Map接口(整体认知)
3.List接口集合:ArrayList和Vector队列
a) ArrayList数组队列(知道该如何遍历)
b) Vector向量队列
特点:有序、可重复
4.Set接口集合:HashSet集合
特点:无序的、不能重复的
遍历set
1)先拿到set容器的迭代器对象
2)检测容器中是否有东西可以取
3)有东西可以取,把东子取出来进行保存
4)利用循环结构,遍历set
5.Map接口集合:HashMap集合
HashMap是以键值对的形式进行存储的,需要注意的是,值可以相同,但键是唯一的,好比有很多人可以叫小明,但我们怎么确认哪一个小明是我们要找的呢?我们可以给每个小明一个独一无二的编号,通过编号去找到我们要找的小明;类似生活中每个人的身份证是独一无二的,但却有很多同名同姓的人;如果给同一个键赋值d的话,后面的值会覆盖前面赋的值,但键不变,返回的是被覆盖的值;详见JAVA中的API文档
好了,进入正题,我们接下来要用Map接口中的HashMap集合来模拟数据库实现用户登录和注册功能
思路:
1、创建窗体(登录界面)
2、给窗体添加登录和注册按钮以及相关控件(用户名和密码输入框以及标签)
3、给登录按钮添加监听器,处理登录逻辑
3.1、先用HashMap创建对象,并添加<用户名、面>键值对(模拟数据库)
3.2、当点击登录按钮时,检测输入框中输入的用户名和密码是否在数据库内(是否有该键值对)
3.3、提示登录成功或者登录失败
4、给注册按钮天剑监听器,处理注册逻辑
4.1、当点击注册按钮时,出现注册页面
4.2、当用户输入新的用户名和密码时,检测数据库中是否已经存在该用户名并提示
4.3、确认注册后,往数据库中添加新的数据(新的键值对)
原代码:
登录界面类:
package com.huaxin.login;
import java.awt.FlowLayout;
import java.util.HashMap;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.text.StyledEditorKit.ForegroundAction;
public class LoginFrame extends JFrame{
//HashMap对象,模拟数据库
//这里是集合的泛型形式,指定存储的内容是字符串、字符串键值对类型
//声明为静态类型,便于访问
public static HashMap<String,String> map = new HashMap<String,String>();
//数据库初始化,当加载程序时,就要加载数据库
static {
for (int i = 0; i < 10; i++) {
map.put("user"+i, "pwd"+i);
}
}
//初始化窗体
public void initFrame(){
this.setSize(250,200);
this.setDefaultCloseOperation(3);
this.setTitle("登录验证");
this.setLocationRelativeTo(null);
this.setLayout(new FlowLayout());
JLabel username = new JLabel("用户名:");
JTextField name =new JTextField(15);
JLabel pwd = new JLabel("密 码 :");
JTextField password =new JTextField(15);
JButton bt = new JButton("登录");
JButton bt1 = new JButton("注册");
this.add(username);
this.add(name);
this.add(pwd);
this.add(password);
this.add(bt);
this.add(bt1);
this.setVisible(true);
//登录按钮添加监听器,处理登录逻辑
ButtonListener bl= new ButtonListener(name,password);
bt.addActionListener(bl);
//注册按钮添加监听器,处理注册逻辑
ZhuceLisener zl = new ZhuceLisener();
bt1.addActionListener(zl);
}
}
package com.huaxin.login;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class ButtonListener implements ActionListener{
public JTextField name;
public JTextField password;
//获取传过来的输入框对象
public ButtonListener(JTextField name, JTextField password) {
this.name=name;
this.password=password;
}
//处理登录逻辑
public void actionPerformed(ActionEvent e) {
//获取输入框的用户名和密码信息
String username =name.getText();
String pwd =password.getText();
//检测用户名和密码输入是否为空
if(username.equals("")){
JOptionPane.showMessageDialog(null, "请输入用户名!");
}
else if( pwd.equals("")){
JOptionPane.showMessageDialog(null, "请输入用户密码!");
}
//不为空是查找数据库
else{
if(CheckLogin(username,pwd)){
JOptionPane.showMessageDialog(null, "登录成功!");
}else{
JOptionPane.showMessageDialog(null, "登录失败!");
}
}
}
public boolean CheckLogin(String name,String pawd){
//数据库中是否包含该用户名
if(LoginFrame.map.containsKey(name)){
String key =name;
//检验密码是否正确
if(LoginFrame.map.get(key).equals(pawd)){
return true;
}else{
JOptionPane.showMessageDialog(null, "密码错误!");
return false;
}
}
return false;
}
}
注册按钮监听类:
package com.huaxin.login;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;
public class ZhuceLisener implements ActionListener{
public JTextField name;
public JTextField password;
public JFrame jf;
//注册按钮处理逻辑
public void actionPerformed(ActionEvent e) {
//创建注册页面
ZhuceLisener zhece = new ZhuceLisener();
zhece.showFrame();
}
public void showFrame(){
jf = new JFrame();
jf.setSize(250,200);
jf.setTitle("欢迎注册");
jf.setLocationRelativeTo(null);
jf.setLayout(new FlowLayout());
JLabel username = new JLabel("请输入用户名:");
name =new JTextField(15);
JLabel pwd = new JLabel("请输入密 码 :");
password =new JTextField(15);
//该注册页面的注册按钮添加监听器
JButton bt1 = new JButton("注册");
Listenerone one = new Listenerone(this);
bt1.addActionListener(one);
jf.add(username);
jf.add(name);
jf.add(pwd);
jf.add(password);
jf.add(bt1);
jf.setVisible(true);
}
}
注册页面中的注册按钮的监听类:
package com.huaxin.login;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JOptionPane;
public class Listenerone implements ActionListener{
public ZhuceLisener zhuceLisener;
//接受传过来的对象
public Listenerone(ZhuceLisener zhuceLisener) {
this.zhuceLisener=zhuceLisener;
}
public void actionPerformed(ActionEvent e) {
//拿到注册页面中输入的信息
String zhucename = zhuceLisener.name.getText();
String zhucepwd = zhuceLisener.password.getText();
//检测用户输入
if(zhucename.equals("")){
JOptionPane.showMessageDialog(null, "请输入用户名!");
}else if(LoginFrame.map.containsKey(zhucename)){
JOptionPane.showMessageDialog(null, "该账号已经存在!");
}
else if(zhucepwd.equals("")){
JOptionPane.showMessageDialog(null, "请输入用户密码!");
}
else{
//添加新的键值对
LoginFrame.map.put(zhucename, zhucepwd);
JOptionPane.showMessageDialog(null, "注册成功!");
//注册页面隐藏
zhuceLisener.jf.setVisible(false);
}
}
}
主函数中的测试类:
package com.huaxin.login;
public class test {
public static void main(String[] args) {
LoginFrame login=new LoginFrame();
login.initFrame();
}
}
运行结果:
登录和注册页面
注册功能实现:
新注册用户登录验证:
本文介绍如何使用Java集合框架中的HashMap模拟数据库,实现一个简单的用户登录和注册功能。项目涉及窗口设计、按钮监听器及逻辑处理。
4860

被折叠的 条评论
为什么被折叠?



