1. 创建用户类
package ltp20240619;
public class User {
String userName;
String password;
boolean isLogin;
/*
return 1: 已在线
return 2: 登录成功
return 3: 密码错误
*/
public int login(String loginPwd) {
if (password.equals(loginPwd)) {
if (isLogin) {
return 1;
}
isLogin = true;
return 2;
}
return 3;
}
public void logout() {
isLogin = false;
}
}
先设置用户的属性:用户名、密码和登录状态
在表示用户登录的代码中,1表示已经在线,2表示登录成功,3表示密码错误,4表示用户未注册。创建一个方法login,用来判断用户的登录状态。如果既定的密码等于输入的密码,则显示用户已经登录或者用户登录成功,否则显示密码错误。然后再创建一个退出的登录的方法logout。
2.创建用户服务类
package ltp20240619;
public class UserService {
int maxSize = 5;
// 存储用户的列表
User[] userList = new User[maxSize];
// 实时的用户个数
int userSize = 0;
/*
用户登录
*/
public int userLogin(String name, String pwd) { // 输入用户名和密码
// 查找是否被注册过
for (int i = 0; i < userSize; i++) {
User user = userList[i];
if (user.userName.equals(name)) {
return user.login(pwd);
}
}
return 4;// 用户未注册
}
/*
用户注册
*/
public int register(String name, String pwd) { // 用户注册时设置用户名和密码
for (int i = 0; i < userSize; i++) {
User user = userList[i];
if (user.userName.equals(name)) {
return 1; // 用户已注册
}
}
if (userSize >= maxSize) {
return 2; // 注册人数已达上限,等待服务扩容,暂停注册
}
User user = new User();
user.userName = name;
user.password = pwd;
userList[userSize] = user;
userSize++;
return 3;// 注册成功
}
}
先设置用户的最大注册数量,这里设置为5,然后设置一个列表来存储每个用户,然后设置一个变量来实时监测用户的个数。
然后创建一个方法userLogin来模拟用户登录的逻辑。首先查找用户有没有注册,通过for循环检索userList里的用户名是否与输入的用户名有对应,如果有则说明注册成功,再让用户去输入密码接着按照用户类里面的代码逻辑运行;如果没有则显示未注册。
然后创建一个方法register来模拟用户注册的逻辑。在表示用户注册的代码中,1表示用户已注册,2表示注册人数已达上限,3表示注册成功。首先同样用for循环来检查某个用户名有没有被注册,若已注册则直接返回。其次,如果继续进行的话,检查注册数量是否已经达到上限,如果已经达到上限则直接返回。然后,如果某个用户名既没有被注册,此时注册人数也没有达到上限,则正常进行注册步骤。先用用户类User创建一个新的对象user,然后将user的用户名userName和密码password分别设置为对应的输入结果,然后将存储用户的列表userList的第userSize个元素用现在创建的user替换,最后userSize由于新注册了一个用户需要数值上加一,最后返回,表示注册成功。
3.创建登录监听类
package ltp20240619;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class LoginListener implements ActionListener {
JTextField nameIn2;
JTextField pwdIn2;
UserService userService = new UserService();
public void actionPerformed(ActionEvent e) {
// 获取点击按钮时按钮上的文本
String ac = e.getActionCommand();
System.out.println("点击了按钮" + ac);
// 获取输入框上的文本
String name = nameIn2.getText();
String pwd = pwdIn2.getText();
System.out.println("账号:" + name);
System.out.println("密码:" + pwd);
if (ac.equals("登录")) {
// 调用登录服务方法,获取登录反馈编码,根据编码作出反应
int loginCode = userService.userLogin(name, pwd);
switch (loginCode) {
case 1:
JOptionPane.showMessageDialog(null,
name + "用户已在线,请勿重复登录");
break;
case 2:
JOptionPane.showMessageDialog(null,
name + "用户登录成功");
break;
case 3:
JOptionPane.showMessageDialog(null,
name + "用户密码验证错误");
break;
case 4:
JOptionPane.showMessageDialog(null,
name + "用户未注册,请先注册");
break;
}
}else if (ac.equals("注册")) {
int registerCode = userService.register(name, pwd);
switch (registerCode) {
case 1:
JOptionPane.showMessageDialog(null,
name + "用户已注册,请勿重复注册");
case 2:
JOptionPane.showMessageDialog(null,
name + "注册人数已达上限,等待服务扩容,暂停注册");
case 3:
JOptionPane.showMessageDialog(null,
name + "用户注册成功");
break;
}
}
}
}
首先声明一个名为LoginListener的公共类,实现ActionListener接口,这个接口用来处理动作事件。
然后在声明两个文本框,用来接受用户名和密码。然后再创建一个UserService的实例,用来处理用户服务。
然后创建一个方法actionPerformed用来实现ActionListener,当按钮被点击时会被调用。创建一个变量ac来获取按钮上面的信息,被点击了以后程序里面会显示该按钮被点击。然后再创建两个变量name和pwd,来分别获取输入框上面的文本。如果被点击的时登录按钮,则调用灯笼裤服务方法,获取灯笼裤反馈编码1,2,3,4,根据编码来分别作出反应。如果被点击的是注册按钮,则调用注册服务方法,获取反馈编码1,2,3,根据编码来分别作出反应。
4.用户交互类
package ltp20240619;
import javax.swing.*;
import java.awt.*;
public class LoginUI {
public void showUI() {
// 创建窗体对象
JFrame jf = new JFrame();
jf.setTitle("登录界面");
jf.setSize(350, 450);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 点击关闭按钮时,退出进程
FlowLayout fl = new FlowLayout();
jf.setLayout(fl);
jf.setLocation(500, 200);
// 图片
ImageIcon icon = new ImageIcon(
"C:\\Users\\13663\\OneDrive\\桌面\\Icon.png"
);
JLabel iconJla = new JLabel(icon);
// 账号
jf.add(iconJla); // 标签,可以显示文本或图片
JLabel nameJla = new JLabel("账号:");
jf.add(nameJla);
JTextField nameIn = new JTextField(30);
jf.add(nameIn);
// 密码
JLabel pwdJla = new JLabel("密码:");
jf.add(pwdJla);
JPasswordField pwdIn = new JPasswordField(30);
jf.add(pwdIn);
// 登录与注册
JButton btnLogin = new JButton("登录");
jf.add(btnLogin);
JButton btnRegister = new JButton("注册");
jf.add(btnRegister);
// 所有组件显示到屏幕上
jf.setVisible(true);
// 加载监听
LoginListener loginL = new LoginListener();
btnLogin.addActionListener(loginL);
btnRegister.addActionListener(loginL);
loginL.nameIn2 = nameIn; // 将nameIn指向的地址 复制一份给 nameIn2
loginL.pwdIn2 = pwdIn;
}
public static void main(String[] args) {
LoginUI loginUI = new LoginUI();
loginUI.showUI();
}
}
声明一个类LoginUI,来实现用户交互。首先创建一个方法showUI,来产生用户交互界面。首先用JFrame来创建窗体对象,分别设置标题、大小、关闭方式、flow布局、窗口位置。其次分别插入图片、账号的标志和输入框、密码的标志和输入框、登录和注册的按钮,最后设置将所有组件显示在屏幕上。
然后加载监听。首先创建一个LoginListener的实例loginL,然后为用户注册和登录增加监听器loginL。接着将账号和密码文本框的引用赋值给监听器的相应字段,以便在事件处理方法中访问它们的内容。
最后使用主方法来调用整个用户交互界面。