package mathlearning.ui; import mathlearning.model.User; import mathlearning.service.UserService; import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; public class LoginFrame extends JFrame{ private UserService userService; private JTextField emailField; private JPasswordField passwordField; public LoginFrame(UserService userService) { this.userService = userService; initializeUI(); } private void initializeUI() { setTitle("数学学习软件 - 登录"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setSize(400, 300); setLocationRelativeTo(null); setResizable(false); // 主面板 JPanel mainPanel = new JPanel(new BorderLayout(10, 10)); mainPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); // 标题 JLabel titleLabel = new JLabel("用户登录", JLabel.CENTER); titleLabel.setFont(new Font("微软雅黑", Font.BOLD, 24)); mainPanel.add(titleLabel, BorderLayout.NORTH); // 表单面板 JPanel formPanel = new JPanel(new GridLayout(3, 2, 10, 10)); JLabel emailLabel = new JLabel("邮箱:"); emailLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14)); emailField = new JTextField(); JLabel passwordLabel = new JLabel("密码:"); passwordLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14)); passwordField = new JPasswordField(); formPanel.add(emailLabel); formPanel.add(emailField); formPanel.add(passwordLabel); formPanel.add(passwordField); mainPanel.add(formPanel, BorderLayout.CENTER); // 按钮面板 JPanel buttonPanel = new JPanel(new FlowLayout()); JButton loginButton = new JButton("登录"); loginButton.setFont(new Font("微软雅黑", Font.PLAIN, 14)); loginButton.addActionListener(new LoginButtonListener()); JButton registerButton = new JButton("注册"); registerButton.setFont(new Font("微软雅黑", Font.PLAIN, 14)); registerButton.addActionListener(e -> openRegisterFrame()); JButton changeCodeButton = new JButton("忘记密码?"); changeCodeButton.setFont(new Font("微软雅黑", Font.PLAIN, 14)); changeCodeButton.addActionListener(e -> openChangeCodeFrame()); buttonPanel.add(loginButton); buttonPanel.add(registerButton); buttonPanel.add(changeCodeButton); mainPanel.add(buttonPanel, BorderLayout.SOUTH); add(mainPanel); } private class LoginButtonListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { String email = emailField.getText().trim(); String password = new String(passwordField.getPassword()); if (email.isEmpty() || password.isEmpty()) { JOptionPane.showMessageDialog(LoginFrame.this, "请输入邮箱和密码", "错误", JOptionPane.ERROR_MESSAGE); return; } if (userService.login(email, password)) { JOptionPane.showMessageDialog(LoginFrame.this, "登录成功!", "成功", JOptionPane.INFORMATION_MESSAGE); // 这里可以打开主界面 openMainFrame(email); } else { JOptionPane.showMessageDialog(LoginFrame.this, "邮箱或密码错误", "登录失败", JOptionPane.ERROR_MESSAGE); } } } private void openRegisterFrame() { RegisterFrame registerFrame = new RegisterFrame(userService, this); registerFrame.setVisible(true); this.setVisible(false); } private void openChangeCodeFrame() { ChangeCodeFrame changeCodeFrame = new ChangeCodeFrame(userService, this); changeCodeFrame.setVisible(true); this.setVisible(false); } private void openMainFrame(String email) { User user = userService.getUser(email); // 这里先简单显示一个消息,后续可以扩展为主界面 JOptionPane.showMessageDialog(this, "欢迎 " + user.getUsername() + "!\n登录成功,主界面功能待实现。", "登录成功", JOptionPane.INFORMATION_MESSAGE); } }