完成主菜单大部分功能

pull/2/head
陈映江 7 months ago
parent b340f6960b
commit c1b2f6f111

@ -1,9 +1,9 @@
[ {
"username" : "小鱼",
"email" : "1280556515@qq.com",
"passwordHash" : "$2a$12$fAWGM2CJSSiulyFbDWyRyefrBWr9emYrMdkD.Rw2LPKFaYQeYYW9K",
"registrationDate" : [ 2025, 10, 8, 21, 0, 37, 863490500 ],
"verificationCode" : "926911",
"passwordHash" : "$2a$12$CsCIbkduy54ow1QwQDN0M.lJTf8jteN9n/Z3FrMklm.I5b/JmcUwG",
"registrationDate" : [ 2025, 10, 10, 11, 7, 5, 853200500 ],
"verificationCode" : "737858",
"verified" : true,
"type" : "小学"
"type" : "高中"
} ]

@ -13,7 +13,7 @@ public class User {
private boolean verified;
private String type;
public User() {}
public User( ) {}
public User(String email, String passwordHash, String verificationCode) {
this.email = email;

@ -226,6 +226,16 @@ public class UserService {
return user != null && user.isVerified();
}
public boolean updateUsername(String email, String newUsername) {
User user = users.get(email);
if (user == null) {
return false;
}
user.setUsername(newUsername);
saveUsers();
return true;
}
public boolean isValidEmail(String email) {
return email.matches("^[A-Za-z0-9+_.-]+@(.+)$");
}

@ -14,6 +14,8 @@ public class MainFrame extends JFrame {
private UserService userService;
private JLabel welcomeLabel;
private JLabel typeLabel;
private JButton changeTypeButton;
private JPanel mainPanel;
public MainFrame(User user, UserService userService) {
this.currentUser = user;
@ -30,7 +32,7 @@ public class MainFrame extends JFrame {
// 主面板
JPanel titlePanel = new JPanel(new BorderLayout());
JPanel mainPanel = new JPanel(new BorderLayout(10, 10));
mainPanel = new JPanel(new BorderLayout(10, 10));
mainPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
// 欢迎用户与type信息
@ -49,7 +51,7 @@ public class MainFrame extends JFrame {
JPanel centerButtonPanel = new JPanel(new GridLayout(2, 1, 15, 15));
centerButtonPanel.setBorder(BorderFactory.createEmptyBorder(30, 50, 30, 50));
// 切换教育阶段按钮
JButton changeTypeButton = new JButton("切换教育阶段");
changeTypeButton = new JButton("切换教育阶段");
changeTypeButton.setFont(new Font("微软雅黑", Font.BOLD, 18));
changeTypeButton.setBackground(new Color(70, 130, 180));
changeTypeButton.setForeground(Color.WHITE);
@ -120,7 +122,15 @@ public class MainFrame extends JFrame {
public void actionPerformed(ActionEvent e) {
int result = JOptionPane.showConfirmDialog(MainFrame.this, "确定要退出登陆吗?", "退出登录", JOptionPane.YES_NO_OPTION);
if (result == JOptionPane.YES_OPTION) {
if (result == JOptionPane.YES_OPTION) {// 为按钮添加边框和圆角效果
changeTypeButton.setBorder(BorderFactory.createCompoundBorder(
BorderFactory.createLineBorder(new Color(50, 100, 150), 1),
BorderFactory.createEmptyBorder(10, 20, 10, 20)));
changeTypeButton.setFocusPainted(false); // 去除焦点边框
// 为主面板添加渐变背景
mainPanel.setBackground(new Color(245, 245, 245));
LoginFrame loginFrame = new LoginFrame(userService);
loginFrame.setVisible(true);
dispose();
@ -131,7 +141,9 @@ public class MainFrame extends JFrame {
private class ProfileListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
ProfileFrame profileFrame = new ProfileFrame(currentUser, userService);
profileFrame.setVisible(true);
dispose();
}
}
}

@ -0,0 +1,121 @@
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 ProfileFrame extends JFrame {
private User user;
private UserService userService;
private JPanel mainPanel;
private JLabel usernameValue;
public ProfileFrame(User user, UserService userService) {
this.user = user;
this.userService = userService;
InitUI();
}
private void InitUI() {
setTitle("个人资料");
setSize(400, 300);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
setLocationRelativeTo(null);
setResizable(false);
// 创建主面板
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 infoPanel = new JPanel(new GridLayout(3, 2, 10, 10));
JLabel usernameLabel = new JLabel("用户名:");
usernameLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
usernameValue = new JLabel(user.getUsername());
usernameLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
infoPanel.add(usernameLabel);
infoPanel.add(usernameValue);
JLabel mailLabel = new JLabel("QQ邮箱");
mailLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
JLabel mailValue = new JLabel(user.getEmail());
infoPanel.add(mailLabel);
infoPanel.add(mailValue);
mainPanel.add(infoPanel, BorderLayout.CENTER);
//三个按钮
JPanel buttonPanel = new JPanel(new FlowLayout());
JButton returnToMainButton = new JButton("返回");
returnToMainButton.addActionListener(new returnToMainButtonListener());
JButton changePasswordButton = new JButton("修改密码");
changePasswordButton.addActionListener(e -> openChangePasswordFrame());
JButton changeUsernameButton = new JButton("更改用户名");
changeUsernameButton.addActionListener(new ChangeUsernameButtonListener());
buttonPanel.add(returnToMainButton);
buttonPanel.add(changePasswordButton);
buttonPanel.add(changeUsernameButton);
mainPanel.add(buttonPanel, BorderLayout.SOUTH);
add(mainPanel);
}
private class returnToMainButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
MainFrame mainFrame = new MainFrame(user, userService);
mainFrame.setVisible(true);
dispose();
}
}
private void openChangePasswordFrame() {
}
private class ChangeUsernameButtonListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e ) {
String newUsername = JOptionPane.showInputDialog(ProfileFrame.this, "请输入您的新用户名:", "修改用户名", JOptionPane.QUESTION_MESSAGE);
if (newUsername == null ) {
return;
}
newUsername = newUsername.trim();
if (newUsername.isEmpty()) {
JOptionPane.showMessageDialog( ProfileFrame.this, "用户名不能为空!", "错误", JOptionPane.ERROR_MESSAGE);
return;
}
if (newUsername.equals(user.getUsername())) {
JOptionPane.showMessageDialog( ProfileFrame.this, "新用户名与原用户名相同!", "提示", JOptionPane.ERROR_MESSAGE);
return;
}
int confirm = JOptionPane.showConfirmDialog(ProfileFrame.this,"确定要修改用户名为\"" + newUsername + "\"吗?", "修改用户名", JOptionPane.YES_NO_OPTION);
if (confirm == JOptionPane.YES_OPTION) {
String oldUsername = user.getUsername();
boolean updated = userService.updateUsername(user.getEmail(), newUsername);
if (updated) {
usernameValue.setText(newUsername);
JOptionPane.showMessageDialog(ProfileFrame.this, "修改成功!", "成功", JOptionPane.INFORMATION_MESSAGE);
}
else {
user.setUsername(oldUsername);
JOptionPane.showMessageDialog(ProfileFrame.this, "修改失败!", "错误", JOptionPane.ERROR_MESSAGE);
}
}
}
}
}
Loading…
Cancel
Save