diff --git a/src/backend/controller/interfaces/LoginController.java b/src/backend/controller/interfaces/LoginController.java index 7cbe6cd..c41c52f 100644 --- a/src/backend/controller/interfaces/LoginController.java +++ b/src/backend/controller/interfaces/LoginController.java @@ -1,5 +1,4 @@ package backend.controller.interfaces; -import backend.service.interfaces.AuthService; /** * 登录控制器接口,用于处理用户登录和注册相关的业务逻辑 diff --git a/src/backend/dao/impl/UserDao.java b/src/backend/dao/impl/UserDao.java index 701ca8f..d8d32bb 100644 --- a/src/backend/dao/impl/UserDao.java +++ b/src/backend/dao/impl/UserDao.java @@ -2,12 +2,10 @@ package backend.dao.impl; import backend.dao.interfaces.UserDaoIF; import backend.model.User; +import backend.utils.DBConnectionPool; import backend.utils.DBHelper; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; +import java.sql.*; import java.util.List; public class UserDao implements UserDaoIF { @@ -29,7 +27,7 @@ public class UserDao implements UserDaoIF { user.setPassword(rs.getString("password")); user.setRole(rs.getString("role")); user.setEmail(rs.getString("email")); - user.setCreatedAt(rs.getTimestamp("createdAt")); + user.setCreatedAt(String.valueOf(rs.getTimestamp("createdAt"))); } } catch (SQLException e) { System.out.println("查询用户失败: " + e.getMessage()); @@ -53,7 +51,7 @@ public class UserDao implements UserDaoIF { user.setPassword(rs.getString("password")); user.setRole(rs.getString("role")); user.setEmail(rs.getString("email")); - user.setCreatedAt(rs.getTimestamp("createdAt")); + user.setCreatedAt(String.valueOf(rs.getTimestamp("createdAt"))); } }catch (SQLException e) { System.out.println("查询用户失败: " + e.getMessage()); @@ -62,8 +60,11 @@ public class UserDao implements UserDaoIF { } @Override - public boolean addUser(User user) { + public int addUser(User user) { Connection conn = DBHelper.getInstance().getConnection(); + int row=0; + if(conn==null) + return 0; String sql = "insert into USER (username,password,role,email,createdAt) values (?,?,?,?,?)"; try{ PreparedStatement stmt = conn.prepareStatement(sql); @@ -71,17 +72,23 @@ public class UserDao implements UserDaoIF { stmt.setString(2,user.getPassword()); stmt.setString(3,user.getRole()); stmt.setString(4,user.getEmail()); - stmt.setTimestamp(5,user.getCreatedAt()); - return stmt.executeUpdate() > 0; + stmt.setDate(5,user.getCreatedAt()); + row = stmt.executeUpdate(); + stmt.close(); + DBConnectionPool.releaseConnection(conn); } catch (SQLException e) { System.out.println("添加用户失败: " + e.getMessage()); } - return false; + return row; } @Override - public boolean updateUser(User user) { + public int updateUser(User user) { Connection conn = DBHelper.getInstance().getConnection(); + int row = 0; + if(conn==null) + return 0; + String sql = "update USER set username = ?,password = ?,role = ?,email = ?,createdAt = ? where id = ?"; try{ PreparedStatement stmt = conn.prepareStatement(sql); @@ -89,27 +96,30 @@ public class UserDao implements UserDaoIF { stmt.setString(2,user.getPassword()); stmt.setString(3,user.getRole()); stmt.setString(4,user.getEmail()); - stmt.setTimestamp(5,user.getCreatedAt()); + stmt.setDate(5,user.getCreatedAt()); stmt.setInt(6,user.getId()); - return stmt.executeUpdate() > 0; + row = stmt.executeUpdate(); + stmt.close(); + DBConnectionPool.releaseConnection(conn); } catch (SQLException e) { System.out.println("更新用户失败: " + e.getMessage()); } - return false; + return row; } @Override - public boolean deleteUser(int id) { + public int deleteUser(int id) { Connection conn = DBHelper.getInstance().getConnection(); String sql = "delete from USER where id = ?"; + int row = 0; try{ PreparedStatement stmt = conn.prepareStatement(sql); stmt.setInt(1,id); - return stmt.executeUpdate() > 0; + row = stmt.executeUpdate() ; } catch (SQLException e) { System.out.println("删除用户失败: " + e.getMessage()); } - return false; + return row; } @Override @@ -126,7 +136,7 @@ public class UserDao implements UserDaoIF { user.setPassword(rs.getString("password")); user.setRole(rs.getString("role")); user.setEmail(rs.getString("email")); - user.setCreatedAt(rs.getTimestamp("createdAt")); + user.setCreatedAt(String.valueOf(rs.getTimestamp("createdAt"))); return List.of(user); } }catch (SQLException e) { diff --git a/src/backend/dao/interfaces/UserDaoIF.java b/src/backend/dao/interfaces/UserDaoIF.java index 6b32412..78d5624 100644 --- a/src/backend/dao/interfaces/UserDaoIF.java +++ b/src/backend/dao/interfaces/UserDaoIF.java @@ -27,21 +27,21 @@ public interface UserDaoIF { * @param user 要添加的用户对象 * @return 添加成功返回true,失败返回false */ - boolean addUser(User user); + int addUser(User user); /** * 更新用户信息 * @param user 包含更新信息的用户对象 * @return 更新成功返回true,失败返回false */ - boolean updateUser(User user); + int updateUser(User user); /** * 删除用户 * @param id 要删除的用户ID * @return 删除成功返回true,失败返回false */ - boolean deleteUser(int id); + int deleteUser(int id); /** * 查找所有用户 diff --git a/src/backend/model/Questions.java b/src/backend/model/Questions.java new file mode 100644 index 0000000..e80740f --- /dev/null +++ b/src/backend/model/Questions.java @@ -0,0 +1,9 @@ +package backend.model; + +public class Questions { + private int id; + private String name; + private String description; + private String answer; + private int frequency; +} diff --git a/src/backend/model/User.java b/src/backend/model/User.java index dea24df..14a3e4f 100644 --- a/src/backend/model/User.java +++ b/src/backend/model/User.java @@ -1,4 +1,6 @@ package backend.model; +import backend.utils.DBHelper; + import java.sql.*; /** @@ -50,6 +52,24 @@ public class User { this.id = id; } + public void setId() { + Connection conn = DBHelper.getInstance().getConnection(); + //根据目前最大ID值 + String sql = "select max(id) from USER"; + try { + PreparedStatement stmt = conn.prepareStatement(sql); + ResultSet rs = stmt.executeQuery(); + if(rs.next()) { + id = rs.getInt(1) + 1; + this.id = id; + } + } catch (SQLException e) { + e.printStackTrace(); + } + } + + + /** * 设置用户名 * @@ -65,7 +85,10 @@ public class User { * @param role 用户角色,可选值为"admin"或"user" */ public void setRole(String role) { - this.role = role; + if(this.getUsername().equals("admin")) + this.role = "admin"; + else + this.role = role; } /** @@ -91,9 +114,16 @@ public class User { * * @param createdAt 用户创建时间 */ - public void setCreatedAt(Timestamp createdAt) { - this.createdAt = createdAt; +public void setCreatedAt(String createdAt) { + try { + long timestamp = Long.parseLong(createdAt); + this.createdAt = new Date(timestamp); + } catch (NumberFormatException e) { + // 如果不是有效的时间戳,可以设置为当前日期或处理异常 + this.createdAt = new Date(System.currentTimeMillis()); } +} + /** * 获取用户ID @@ -145,8 +175,8 @@ public class User { * * @return 用户创建时间 */ - public Timestamp getCreatedAt() { - return createdAt; + public Date getCreatedAt() { + return Date.valueOf(String.valueOf(createdAt)); } } diff --git a/src/backend/model/enums/LoginStatus.java b/src/backend/model/enums/LoginStatus.java index 68010b5..d93a09a 100644 --- a/src/backend/model/enums/LoginStatus.java +++ b/src/backend/model/enums/LoginStatus.java @@ -2,27 +2,35 @@ package backend.model.enums; /** * 登录状态枚举类 - * 定义了系统中所有可能的登录相关状态码和对应的消息描述 + * 用final保证状态信息不可变,用static提供工具方法 */ public enum LoginStatus { - SUCCESS(490,"登录成功"), - USER_NOT_FOUND(491,"用户不存在"), - PASSWORD_ERROR(492,"密码错误"), - ALREADY_LOGGED_IN(493,"重复登录"), - CAPTCHA_ERROR(494,"验证码错误"), - ACCOUNT_LOCKED(495,"账户被封禁"), - PERMISSION_DENIED(496,"权限不足"), - LOGOUT_SUCCESS(497,"登出成功"), - NOT_LOGGED_IN(498,"未登录"), - UNKNOWN_ERROR(499,"未知错误"), - REGISTER_FAILD(500,"注册失败"); + // 【任务3】枚举实例:状态码和描述 + // 成功登录 + SUCCESS(200,"登录成功"), + // 密码错误 + PASSWORD_ERROR(901,"密码错误"), + // 验证码错误 + CAPTCHA_ERROR(902,"验证码错误"), + // 用户不存在 + USER_NOT_FOUND(903,"用户不存在"), + //注册失败 + REGISTER_FAILED(904, "注册失败,用户名已存在"), + //注册成功 + REGISTER_SUCCESS(905, "注册成功"), + //两次输入密码不一致 + PASSWORD_NOT_MATCH(906, "两次输入的密码不一致"); + // 【任务1】定义 final修饰的属性:确保状态信息不可修改 private final int code; private final String msg; + + /** - * 构造函数,初始化状态码和消息 + * 【任务2】 + * 构造函数,用于创建LoginStatus实例 * @param code 状态码 * @param msg 状态消息 */ @@ -31,13 +39,14 @@ public enum LoginStatus { this.msg = msg; } + // 静态方法:根据状态码获取枚举实例(static工具方法) /** - * 根据状态码获取对应的登录状态枚举值 + * 【任务4】 + * 静态方法: getByCode 根据状态码获取对应的登录状态枚举值 * @param code 状态码 - * @return 对应的LoginStatus枚举值,如果未找到则返回null + * @return LoginStatus 对应的LoginStatus枚举值,如果找不到匹配的状态码则返回null */ public static LoginStatus getByCode(int code){ - // 遍历所有枚举值查找匹配的状态码 for(LoginStatus status:values()){ if(status.code==code){ return status; @@ -46,21 +55,25 @@ public enum LoginStatus { return null; } + // getter方法(final属性无需setter) /** - * 获取状态码 - * @return 状态码 + * 【任务5】 + * 方法: getCode 获取code值 + * + * @return int code值 */ public int getCode() { return code; } /** - * 获取状态消息 - * @return 状态消息 + * 任务【6】 + * 方法: getMsg 获取消息内容 + * + * @return String 返回当前对象的消息字符串 */ public String getMsg() { return msg; } - } diff --git a/src/backend/service/impl/AuthService.java b/src/backend/service/impl/AuthService.java new file mode 100644 index 0000000..ac6e59d --- /dev/null +++ b/src/backend/service/impl/AuthService.java @@ -0,0 +1,43 @@ +package backend.service.impl; +import backend.dao.impl.UserDao; +import backend.model.enums.LoginStatus; +import backend.model.User; +import backend.utils.impl.*; + +public class AuthService { + private UserDao userDao = new UserDao(); + public LoginStatus login(User user) { + User dbUser = userDao.findByUsername(user.getUsername()); + if(dbUser==null) + return LoginStatus.USER_NOT_FOUND; + if(dbUser.getUsername().equals(user.getUsername())&&dbUser.getPassword().equals(user.getPassword())) + return LoginStatus.SUCCESS; + else if (!dbUser.getUsername().equals(user.getUsername())) { + return LoginStatus.USER_NOT_FOUND; + } + return LoginStatus.PASSWORD_ERROR; + } + + public LoginStatus register(User user) { + User dbAccount = userDao.findByUsername(user.getUsername()); + if(dbAccount!=null) + return LoginStatus.REGISTER_FAILED; + //点击注册按钮后的事件 + int row = userDao.addUser(user); + if(row>0) + return LoginStatus.REGISTER_SUCCESS; + else + return LoginStatus.REGISTER_FAILED; + } + + + public boolean hasPermission(int userId, String requiredRole) { + UserDao userDao = new UserDao(); + User user = userDao.findById(userId); + if (user != null) { + return user.getRole().equals(requiredRole); + } + return false; + } +} + diff --git a/src/backend/service/interfaces/AuthService.java b/src/backend/service/interfaces/AuthService.java deleted file mode 100644 index a151d29..0000000 --- a/src/backend/service/interfaces/AuthService.java +++ /dev/null @@ -1,48 +0,0 @@ -package backend.service.interfaces; - -/** - * 认证服务接口 - * 提供用户认证和权限管理相关功能 - */ -public interface AuthService { - /** - * 用户登录验证 - * 验证用户名和密码是否匹配,如果匹配则允许用户登录系统 - * - * @param username 用户名 - * @param password 密码 - * @return 登录成功返回true,失败返回false - */ - boolean login(String username, String password); - - /** - * 用户注册 - * 创建新的用户账户,将用户信息存储到系统中 - * - * @param username 用户名 - * @param password 密码 - * @param email 邮箱地址 - * @return 注册成功返回true,失败返回false - */ - boolean register(String username, String password, String email); - - /** - * 用户登出 - * 使指定用户的会话失效,结束用户的登录状态 - * - * @param userId 用户唯一标识符 - * @return 登出成功返回true,失败返回false - */ - boolean logout(int userId); - - /** - * 权限检查 - * 检查指定用户是否具有所需的权限角色 - * - * @param userId 用户唯一标识符 - * @param requiredRole 所需的角色权限 - * @return 具有权限返回true,无权限返回false - */ - boolean hasPermission(int userId, String requiredRole); -} - diff --git a/src/backend/utils/impl/CaptchaUtils.java b/src/backend/utils/impl/CaptchaUtils.java new file mode 100644 index 0000000..ec00dd6 --- /dev/null +++ b/src/backend/utils/impl/CaptchaUtils.java @@ -0,0 +1,49 @@ +package backend.utils.impl; + +import java.util.Random; + +public class CaptchaUtils implements backend.utils.interfaces.CaptchaUtils{ + /** + * 字符集常量,包含大小写字母和数字 + */ + static final String CHAR_SET="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; + + /** + * 验证码长度常量,默认为4位 + */ + static final int CAPTCHA_LENGTH=4; + + /** + * 私有构造函数,防止实例化 + */ + private CaptchaUtils(){}; + + /** + * 生成随机验证码 + * + * @return 生成的验证码字符串 + */ + public static String generateCaptcha(){ + Random random = new Random(); + //生成随机验证码 + StringBuilder sb = new StringBuilder(); + for(int i=0;i { + //点击登录按钮后的事件 + String username = usernameTextField.getText(); + String password = passwordField.getText(); + String captcha = captchaTextField.getText(); + //System.out.println("用户名" + username + " 密码" + password + " 验证码" + captcha); + if(username.equals("")||password.equals("")||captcha.equals("")) { + JOptionPane.showMessageDialog(this, "请填写完整信息!", "提示", JOptionPane.INFORMATION_MESSAGE); + return; + } + if(!CaptchaUtils.verifyCaptcha(captcha,captchaLabel.getText())){ + JOptionPane.showMessageDialog(this, LoginStatus.CAPTCHA_ERROR.getMsg(), "提示", JOptionPane.INFORMATION_MESSAGE); + return; + } + User account = new User(); + account.setUsername(username); + account.setPassword(password); + LoginStatus loginStatus = authService.login(account); + if(loginStatus == LoginStatus.SUCCESS) { + //进入主界面 + MainFrame mainFrame = new MainFrame(); + this.dispose(); + } + else if(loginStatus == LoginStatus.USER_NOT_FOUND) { + JOptionPane.showMessageDialog(this, LoginStatus.USER_NOT_FOUND.getMsg(), "提示", JOptionPane.INFORMATION_MESSAGE); + return; + } + else if(loginStatus == LoginStatus.PASSWORD_ERROR) { + JOptionPane.showMessageDialog(this, LoginStatus.PASSWORD_ERROR.getMsg(), "提示", JOptionPane.INFORMATION_MESSAGE); + return; + } + else{ + JOptionPane.showMessageDialog(this, loginStatus.getMsg(), "提示", JOptionPane.INFORMATION_MESSAGE); + } + }); + registerButton.addActionListener(e -> { + //点击注册按钮后的事件 + RegisterFrame registerFrame = new RegisterFrame(); + registerFrame.setVisible(true); + registerFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + }); + } + + + private JPanel initPanel(){ + mainPanel = new JPanel(); + GridLayout gridLayout = new GridLayout(6,1,10,10); + mainPanel.setLayout(gridLayout); + //第1层 空白面板 占用 + mainPanel.add(new JPanel()); + //第2层 账号面板 + mainPanel.add(initAcountPanel()); + //第3层 密码面板 + mainPanel.add(initPasswordPanel()); + //第4层 验证码面板 + mainPanel.add(initCaptchaPanel()); + //第5层 按钮面板 + mainPanel.add(initButtonPanel()); + //第6层 空白面板 占用 + return mainPanel; + } + + private JPanel initAcountPanel(){ + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(1,4,10,0)); + JLabel label = new JLabel("用户名:"); + //让label居右 + label.setHorizontalAlignment(SwingConstants.RIGHT); + usernameTextField = new JTextField(15); + panel.add(label); + panel.add(usernameTextField); + panel.add(new JPanel()); + return panel; + } + + private JPanel initPasswordPanel(){ + JPanel panel = new JPanel(); + // 设置网格布局,1行4列,水平间距10像素 + panel.setLayout(new GridLayout(1,4,10,0)); + JLabel label = new JLabel("密 码:"); + // 设置标签文本右对齐 + label.setHorizontalAlignment(SwingConstants.RIGHT); + passwordField = new JPasswordField(15); + panel.add(label); + panel.add(passwordField); + // 添加空白面板占位 + panel.add(new JPanel()); + return panel; + } + + private JPanel initCaptchaPanel(){ + // 创建面板并设置网格布局 + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(1,4,10,0)); + + // 创建验证码标签 + JLabel label = new JLabel("验证码:"); + label.setHorizontalAlignment(SwingConstants.RIGHT); + + // 创建验证码输入框和验证码显示标签 + captchaTextField = new JTextField(4); + captchaLabel = new JLabel(CaptchaUtils.generateCaptcha()); + + // 将组件添加到面板中 + panel.add(label); + panel.add(captchaTextField); + panel.add(captchaLabel); + + return panel; + } + + private JPanel initEmailPanel(){ + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(1,4,10,0)); + JLabel label = new JLabel("邮 箱:"); + label.setHorizontalAlignment(SwingConstants.RIGHT); + JTextField emailTextField = new JTextField(15); + panel.add(label); + panel.add(emailTextField); + panel.add(new JPanel()); + return panel; + } + + private JPanel initButtonPanel(){ + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(1,4,10,0)); + loginButton = new JButton("登录"); + registerButton = new JButton("注册"); + panel.add(new JPanel()); + panel.add(loginButton); + panel.add(registerButton); + panel.add(new JPanel()); + return panel; + } + + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> { + LoginFrame loginFrame = new LoginFrame(); + loginFrame.setVisible(true); + }); + } +} + + + + diff --git a/src/view/MainFrame.java b/src/view/MainFrame.java new file mode 100644 index 0000000..3dd9ce1 --- /dev/null +++ b/src/view/MainFrame.java @@ -0,0 +1,7 @@ +package view; + +import javax.swing.*; + +public class MainFrame { + private JPanel mainPanel; +} diff --git a/src/view/RegisterFrame.java b/src/view/RegisterFrame.java new file mode 100644 index 0000000..777fa8c --- /dev/null +++ b/src/view/RegisterFrame.java @@ -0,0 +1,223 @@ +package view; + +import backend.model.User; +import backend.model.enums.LoginStatus; +import backend.service.impl.AuthService; +import backend.utils.impl.CaptchaUtils; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; + +public class RegisterFrame extends JFrame{ + private JPanel mainPanel;//中间层面板 + private JTextField usernameTextField;//用户名输入框 + private JPasswordField passwordField;//密码输入框 + private JPasswordField confirmPasswordField;//确认密码输入框 + private JTextField captchaTextField;//验证码输入框 + private JTextField emailTextField;//邮箱输入框 + private JLabel captchaLabel;//验证码标签 + private JButton registerButton;//注册按钮 + private JButton backButton;//返回按钮 + private AuthService authService = new AuthService(); + public RegisterFrame() { + //初始化界面 + initView(); + //注册监听器 + initListener(); + usernameTextField.setText("admin"); + passwordField.setText("123456"); + captchaTextField.setText(captchaLabel.getText()); + emailTextField.setText("123456@qq.com"); + confirmPasswordField.setText(passwordField.getText()); + } + private void initView(){ + //1.设置标题 + setTitle("注册"); + //2.设置点击关闭时的动作 + setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + //3.中间层容器 + add(initPanel()); + //4.不允许窗口改变大小 + setResizable(false); + //5.自动调整窗口大小 居中显示 + pack();//自动调整窗口大小 + setLocationRelativeTo(null);//剧中 + //6.显示窗口 + setVisible(true); + } + + private void initListener(){ + captchaLabel.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + captchaLabel.setText(CaptchaUtils.generateCaptcha()); + } + }); + + registerButton.addActionListener(e -> { + //点击注册按钮后的事件 + String username = usernameTextField.getText(); + String password = passwordField.getText(); + String captcha = captchaTextField.getText(); + //System.out.println("用户名" + username + " 密码" + password + " 验证码" + captcha); + if(username.equals("")||password.equals("")||captcha.equals("")) { + JOptionPane.showMessageDialog(this, "请填写完整信息!", "提示", JOptionPane.INFORMATION_MESSAGE); + return; + } + if(!CaptchaUtils.verifyCaptcha(captcha,captchaLabel.getText())){ + JOptionPane.showMessageDialog(this, LoginStatus.CAPTCHA_ERROR.getMsg(), "提示", JOptionPane.INFORMATION_MESSAGE); + return; + } + if(!confirmPasswordField.getText().equals(password)) + JOptionPane.showMessageDialog(this, LoginStatus.PASSWORD_NOT_MATCH.getMsg(), "提示", JOptionPane.INFORMATION_MESSAGE); + User account = new User(); + account.setId(); + account.setUsername(username); + account.setPassword(password); + account.setEmail(emailTextField.getText()); + account.setRole("user"); + account.setCreatedAt(String.valueOf(System.currentTimeMillis())); + LoginStatus loginStatus = authService.register(account); + if(loginStatus==LoginStatus.REGISTER_SUCCESS) { + this.dispose(); + } + if(loginStatus == LoginStatus.SUCCESS) { + //返回注册界面 + mainPanel.removeAll(); + //关闭注册界面 + this.dispose(); + } + else if(loginStatus == LoginStatus.USER_NOT_FOUND) { + JOptionPane.showMessageDialog(this, LoginStatus.USER_NOT_FOUND.getMsg(), "提示", JOptionPane.INFORMATION_MESSAGE); + return; + } + else if(loginStatus == LoginStatus.PASSWORD_ERROR) { + JOptionPane.showMessageDialog(this, LoginStatus.PASSWORD_ERROR.getMsg(), "提示", JOptionPane.INFORMATION_MESSAGE); + return; + } + else{ + JOptionPane.showMessageDialog(this, loginStatus.getMsg(), "提示", JOptionPane.INFORMATION_MESSAGE); + } + }); + backButton.addActionListener(e -> { + //返回登录界面 + mainPanel.removeAll(); + dispose(); + }); + } + + + private JPanel initPanel(){ + mainPanel = new JPanel(); + GridLayout gridLayout = new GridLayout(8,1,10,10); + mainPanel.setLayout(gridLayout); + //第1层 空白面板 占用 + mainPanel.add(new JPanel()); + //第2层 账号面板 + mainPanel.add(initAcountPanel()); + //第3层 密码面板 + mainPanel.add(initPasswordPanel()); + //第4层 密码确认面板 + mainPanel.add(initConfirmPasswordPanel()); + //第5层 邮箱面板 + mainPanel.add(initEmailPanel()); + //第6层 验证码面板 + mainPanel.add(initCaptchaPanel()); + //第7层 按钮面板 + mainPanel.add(initButtonPanel()); + //第8层 空白面板 占用 + return mainPanel; + } + + private JPanel initAcountPanel(){ + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(1,4,10,0)); + JLabel label = new JLabel("用户名:"); + //让label居右 + label.setHorizontalAlignment(SwingConstants.RIGHT); + usernameTextField = new JTextField(15); + panel.add(label); + panel.add(usernameTextField); + panel.add(new JPanel()); + return panel; + } + + private JPanel initPasswordPanel(){ + JPanel panel = new JPanel(); + // 设置网格布局,1行4列,水平间距10像素 + panel.setLayout(new GridLayout(1,4,10,0)); + JLabel label = new JLabel("密 码:"); + // 设置标签文本右对齐 + label.setHorizontalAlignment(SwingConstants.RIGHT); + passwordField = new JPasswordField(15); + panel.add(label); + panel.add(passwordField); + // 添加空白面板占位 + panel.add(new JPanel()); + return panel; + } + + private JPanel initConfirmPasswordPanel(){ + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(1,4,10,0)); + JLabel label = new JLabel("确认密码:"); + label.setHorizontalAlignment(SwingConstants.RIGHT); + confirmPasswordField = new JPasswordField(15); + panel.add(label); + panel.add(confirmPasswordField); + panel.add(new JPanel()); + return panel; + } + private JPanel initCaptchaPanel(){ + // 创建面板并设置网格布局 + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(1,4,10,0)); + + // 创建验证码标签 + JLabel label = new JLabel("验证码:"); + label.setHorizontalAlignment(SwingConstants.RIGHT); + + // 创建验证码输入框和验证码显示标签 + captchaTextField = new JTextField(4); + captchaLabel = new JLabel(CaptchaUtils.generateCaptcha()); + + // 将组件添加到面板中 + panel.add(label); + panel.add(captchaTextField); + panel.add(captchaLabel); + + return panel; + } + + private JPanel initEmailPanel(){ + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(1,4,10,0)); + JLabel label = new JLabel("邮 箱:"); + label.setHorizontalAlignment(SwingConstants.RIGHT); + emailTextField = new JTextField(15); + panel.add(label); + panel.add(emailTextField); + panel.add(new JPanel()); + return panel; + } + + private JPanel initButtonPanel(){ + JPanel panel = new JPanel(); + panel.setLayout(new GridLayout(1,4,10,0)); + registerButton = new JButton("注册"); + backButton = new JButton("返回"); + panel.add(new JPanel()); + panel.add(registerButton); + panel.add(backButton); + panel.add(new JPanel()); + return panel; + } + public static void main(String[] args) { + SwingUtilities.invokeLater(() -> { + view.RegisterFrame registerFrame = new view.RegisterFrame(); + registerFrame.setVisible(true); + }); + } +}