You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
MathLearningApp/src/main/java/mathlearning/ui/ProfileFrame.java

131 lines
5.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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;
addWindowListener(new java.awt.event.WindowAdapter() {
@Override
public void windowClosing(java.awt.event.WindowEvent windowEvent) {
MainFrame mainFrame = new MainFrame(user, userService);
mainFrame.setVisible(true);
}
});
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() {
ChangePasswordFrame changePasswordFrame = new ChangePasswordFrame(user, userService, this);
changePasswordFrame.setVisible(true);
this.setVisible(false);
}
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);
}
}
}
}
}