Compare commits
No commits in common. 'main' and 'wuronghai_branch' have entirely different histories.
main
...
wuronghai_
Binary file not shown.
@ -1,281 +0,0 @@
|
||||
package view;
|
||||
|
||||
import controller.NavigationController;
|
||||
import controller.NavigationService;
|
||||
import controller.QuestionController;
|
||||
import model.Question;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JRadioButton;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.ButtonGroup;
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.JOptionPane;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.Font;
|
||||
import java.awt.Color;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.awt.event.ItemListener;
|
||||
|
||||
public class ExamView extends JFrame {
|
||||
private QuestionController questionController;
|
||||
private NavigationService navigationService;
|
||||
private JLabel questionLabel;
|
||||
private JLabel progressLabel;
|
||||
private ButtonGroup optionGroup;
|
||||
private JRadioButton[] optionButtons;
|
||||
private JButton prevButton;
|
||||
private JButton nextButton;
|
||||
private JButton submitButton;
|
||||
private JLabel hintLabel;
|
||||
|
||||
public ExamView() {
|
||||
questionController = new QuestionController();
|
||||
navigationService = NavigationController.getInstance();
|
||||
initializeUI();
|
||||
}
|
||||
|
||||
private void initializeUI() {
|
||||
setTitle("数学学习软件 - 答题界面");
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
setSize(600, 450);
|
||||
setLocationRelativeTo(null);
|
||||
setResizable(false);
|
||||
|
||||
JPanel mainPanel = new JPanel(new BorderLayout(10, 10));
|
||||
mainPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
|
||||
|
||||
// Progress label
|
||||
progressLabel = new JLabel("", JLabel.CENTER);
|
||||
progressLabel.setFont(new Font("微软雅黑", Font.BOLD, 16));
|
||||
mainPanel.add(progressLabel, BorderLayout.NORTH);
|
||||
|
||||
// Question panel
|
||||
JPanel questionPanel = new JPanel(new BorderLayout(10, 10));
|
||||
questionLabel = new JLabel("", JLabel.CENTER);
|
||||
questionLabel.setFont(new Font("微软雅黑", Font.PLAIN, 18));
|
||||
questionPanel.add(questionLabel, BorderLayout.NORTH);
|
||||
|
||||
// Options panel
|
||||
JPanel optionsPanel = new JPanel(new GridLayout(4, 1, 10, 10));
|
||||
optionGroup = new ButtonGroup();
|
||||
optionButtons = new JRadioButton[4];
|
||||
|
||||
for (int i = 0; i < 4; i++) {
|
||||
optionButtons[i] = new JRadioButton();
|
||||
optionButtons[i].setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
optionGroup.add(optionButtons[i]);
|
||||
optionsPanel.add(optionButtons[i]);
|
||||
|
||||
optionButtons[i].addItemListener(new OptionSelectionListener());
|
||||
}
|
||||
|
||||
questionPanel.add(optionsPanel, BorderLayout.CENTER);
|
||||
mainPanel.add(questionPanel, BorderLayout.CENTER);
|
||||
|
||||
// Hint label
|
||||
hintLabel = new JLabel("请选择答案后继续", JLabel.CENTER);
|
||||
hintLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
hintLabel.setForeground(Color.RED);
|
||||
hintLabel.setVisible(false);
|
||||
mainPanel.add(hintLabel, BorderLayout.SOUTH);
|
||||
|
||||
// Button panel
|
||||
JPanel buttonPanel = new JPanel(new FlowLayout());
|
||||
prevButton = new JButton("上一题");
|
||||
nextButton = new JButton("下一题");
|
||||
submitButton = new JButton("提交试卷");
|
||||
|
||||
prevButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
nextButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
submitButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
|
||||
nextButton.setEnabled(false);
|
||||
|
||||
buttonPanel.add(prevButton);
|
||||
buttonPanel.add(nextButton);
|
||||
buttonPanel.add(submitButton);
|
||||
|
||||
mainPanel.add(buttonPanel, BorderLayout.SOUTH);
|
||||
|
||||
// Add action listeners
|
||||
prevButton.addActionListener(new PrevButtonAction());
|
||||
nextButton.addActionListener(new NextButtonAction());
|
||||
submitButton.addActionListener(new SubmitButtonAction());
|
||||
|
||||
add(mainPanel);
|
||||
}
|
||||
|
||||
public void startNewExam(String difficulty, int questionCount) {
|
||||
questionController.startNewExam(difficulty, questionCount);
|
||||
displayCurrentQuestion();
|
||||
updateNavigationButtons();
|
||||
updateNextButtonState();
|
||||
}
|
||||
|
||||
private void displayCurrentQuestion() {
|
||||
Question question = questionController.getCurrentQuestion();
|
||||
if (question == null) return;
|
||||
|
||||
progressLabel.setText(String.format("第 %d 题 / 共 %d 题",
|
||||
questionController.getCurrentQuestionNumber(),
|
||||
questionController.getTotalQuestions()));
|
||||
|
||||
questionLabel.setText(question.getQuestion());
|
||||
|
||||
String[] options = question.getOptions();
|
||||
for (int i = 0; i < 4; i++) {
|
||||
optionButtons[i].setText((char)('A' + i) + ". " + options[i]);
|
||||
}
|
||||
|
||||
// Restore user's previous selection
|
||||
int userAnswer = questionController.getUserAnswerForCurrentQuestion();
|
||||
optionGroup.clearSelection();
|
||||
if (userAnswer != -1) {
|
||||
optionButtons[userAnswer].setSelected(true);
|
||||
nextButton.setEnabled(canGoNext());
|
||||
hintLabel.setVisible(false);
|
||||
} else {
|
||||
nextButton.setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
private void updateNavigationButtons() {
|
||||
int current = questionController.getCurrentQuestionNumber();
|
||||
int total = questionController.getTotalQuestions();
|
||||
|
||||
prevButton.setEnabled(current > 1);
|
||||
|
||||
// 修改这里:最后一题时禁用下一题按钮
|
||||
boolean isLastQuestion = current == total;
|
||||
nextButton.setEnabled(!isLastQuestion && isCurrentQuestionAnswered());
|
||||
submitButton.setEnabled(isLastQuestion && isCurrentQuestionAnswered());
|
||||
}
|
||||
|
||||
private void updateNextButtonState() {
|
||||
boolean isLastQuestion = questionController.getCurrentQuestionNumber() == questionController.getTotalQuestions();
|
||||
|
||||
if (isLastQuestion) {
|
||||
// 最后一题:禁用下一题,启用提交按钮(如果已回答)
|
||||
nextButton.setEnabled(false);
|
||||
submitButton.setEnabled(isCurrentQuestionAnswered());
|
||||
} else {
|
||||
// 不是最后一题:根据是否回答控制下一题按钮
|
||||
nextButton.setEnabled(isCurrentQuestionAnswered());
|
||||
submitButton.setEnabled(false);
|
||||
}
|
||||
|
||||
hintLabel.setVisible(!isCurrentQuestionAnswered());
|
||||
}
|
||||
|
||||
private boolean canGoNext() {
|
||||
int current = questionController.getCurrentQuestionNumber();
|
||||
int total = questionController.getTotalQuestions();
|
||||
return current < total && isCurrentQuestionAnswered();
|
||||
}
|
||||
|
||||
private boolean isCurrentQuestionAnswered() {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (optionButtons[i].isSelected()) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private void saveCurrentAnswer() {
|
||||
for (int i = 0; i < 4; i++) {
|
||||
if (optionButtons[i].isSelected()) {
|
||||
questionController.submitAnswer(i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 选项选择监听器
|
||||
private class OptionSelectionListener implements ItemListener {
|
||||
@Override
|
||||
public void itemStateChanged(ItemEvent e) {
|
||||
if (e.getStateChange() == ItemEvent.SELECTED) {
|
||||
saveCurrentAnswer(); // 立即保存答案
|
||||
updateNextButtonState();
|
||||
updateNavigationButtons();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class PrevButtonAction implements ActionListener {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
saveCurrentAnswer();
|
||||
if (questionController.previousQuestion()) {
|
||||
displayCurrentQuestion();
|
||||
updateNavigationButtons();
|
||||
updateNextButtonState();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class NextButtonAction implements ActionListener {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
int current = questionController.getCurrentQuestionNumber();
|
||||
int total = questionController.getTotalQuestions();
|
||||
|
||||
// 检查是否是最后一题
|
||||
if (current >= total) {
|
||||
JOptionPane.showMessageDialog(ExamView.this,
|
||||
"已经是最后一题了,请点击提交试卷!", "提示",
|
||||
JOptionPane.INFORMATION_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!isCurrentQuestionAnswered()) {
|
||||
JOptionPane.showMessageDialog(ExamView.this,
|
||||
"请先选择答案!", "提示", JOptionPane.WARNING_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
saveCurrentAnswer();
|
||||
if (questionController.nextQuestion()) {
|
||||
displayCurrentQuestion();
|
||||
updateNavigationButtons();
|
||||
updateNextButtonState();
|
||||
} else {
|
||||
// 如果无法切换到下一题,可能是最后一题
|
||||
JOptionPane.showMessageDialog(ExamView.this,
|
||||
"无法切换到下一题,请点击提交试卷!", "提示",
|
||||
JOptionPane.INFORMATION_MESSAGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class SubmitButtonAction implements ActionListener {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
if (!isCurrentQuestionAnswered()) {
|
||||
JOptionPane.showMessageDialog(ExamView.this,
|
||||
"请先完成本题!", "提示", JOptionPane.WARNING_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
saveCurrentAnswer();
|
||||
|
||||
int score = questionController.calculateScore();
|
||||
int total = questionController.getTotalQuestions();
|
||||
double percentage = questionController.getPercentage();
|
||||
|
||||
// 关闭当前窗口
|
||||
dispose();
|
||||
|
||||
// 显示结果页面
|
||||
navigationService.showResultView(score, total, percentage); // 修改
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,130 +0,0 @@
|
||||
package view;
|
||||
|
||||
import controller.NavigationController;
|
||||
import controller.NavigationService;
|
||||
import controller.UserController;
|
||||
import controller.UserService;
|
||||
import model.User;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.JPasswordField;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.JOptionPane;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.Font;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
public class LoginView extends JFrame {
|
||||
private JTextField usernameField;
|
||||
private JPasswordField passwordField;
|
||||
private UserService userController;
|
||||
private NavigationService navigationService;
|
||||
|
||||
public LoginView() {
|
||||
userController = new UserController();
|
||||
navigationService = NavigationController.getInstance();
|
||||
initializeUI();
|
||||
cleanupUnregisteredUsers();
|
||||
}
|
||||
|
||||
private void cleanupUnregisteredUsers() {
|
||||
try {
|
||||
userController.cleanupUnregisteredUsers();
|
||||
} catch (Exception e) {
|
||||
System.err.println("清理未注册用户时出错: " + e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
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));
|
||||
|
||||
// Title
|
||||
JLabel titleLabel = new JLabel("用户登录", JLabel.CENTER);
|
||||
titleLabel.setFont(new Font("微软雅黑", Font.BOLD, 24));
|
||||
mainPanel.add(titleLabel, BorderLayout.NORTH);
|
||||
|
||||
// Form panel
|
||||
JPanel formPanel = new JPanel(new GridLayout(3, 2, 10, 10));
|
||||
|
||||
JLabel usernameLabel = new JLabel("用户名:");
|
||||
usernameLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
usernameField = new JTextField();
|
||||
|
||||
JLabel passwordLabel = new JLabel("密码:");
|
||||
passwordLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
passwordField = new JPasswordField();
|
||||
|
||||
formPanel.add(usernameLabel);
|
||||
formPanel.add(usernameField);
|
||||
formPanel.add(passwordLabel);
|
||||
formPanel.add(passwordField);
|
||||
|
||||
// Buttons
|
||||
JPanel buttonPanel = new JPanel(new FlowLayout());
|
||||
JButton loginButton = new JButton("登录");
|
||||
JButton registerButton = new JButton("注册");
|
||||
|
||||
loginButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
registerButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
|
||||
buttonPanel.add(loginButton);
|
||||
buttonPanel.add(registerButton);
|
||||
|
||||
formPanel.add(new JLabel()); // Empty cell
|
||||
formPanel.add(buttonPanel);
|
||||
|
||||
mainPanel.add(formPanel, BorderLayout.CENTER);
|
||||
|
||||
// Add action listeners
|
||||
loginButton.addActionListener(new LoginAction());
|
||||
registerButton.addActionListener(e -> {
|
||||
|
||||
navigationService.showRegisterView();
|
||||
});
|
||||
|
||||
// Enter key support
|
||||
usernameField.addActionListener(new LoginAction());
|
||||
passwordField.addActionListener(new LoginAction());
|
||||
|
||||
add(mainPanel);
|
||||
}
|
||||
|
||||
private class LoginAction implements ActionListener {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
String username = usernameField.getText().trim();
|
||||
String password = new String(passwordField.getPassword());
|
||||
|
||||
if (username.isEmpty() || password.isEmpty()) {
|
||||
JOptionPane.showMessageDialog(LoginView.this,
|
||||
"请输入用户名和密码", "错误", JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
User user = userController.login(username, password);
|
||||
if (user != null) {
|
||||
JOptionPane.showMessageDialog(LoginView.this,
|
||||
"登录成功!", "成功", JOptionPane.INFORMATION_MESSAGE);
|
||||
|
||||
navigationService.showMainView(user);
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(LoginView.this,
|
||||
"用户名或密码错误", "错误", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,164 +0,0 @@
|
||||
package view;
|
||||
|
||||
import controller.NavigationController;
|
||||
import controller.NavigationService;
|
||||
import controller.UserController;
|
||||
import model.User;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.JPasswordField;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.JOptionPane;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.Font;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
public class RegisterView extends JFrame {
|
||||
private JTextField usernameField; // 用户名输入框
|
||||
private JTextField emailField;
|
||||
private JTextField codeField;
|
||||
private JPasswordField passwordField;
|
||||
private JPasswordField confirmPasswordField;
|
||||
private UserController userController;
|
||||
private NavigationService navigationService; // 新增
|
||||
private String currentUsername; // 保存当前注册的用户名
|
||||
|
||||
public RegisterView() {
|
||||
userController = new UserController();
|
||||
navigationService = NavigationController.getInstance(); // 新增
|
||||
initializeUI();
|
||||
}
|
||||
|
||||
private void initializeUI() {
|
||||
setTitle("数学学习软件 - 注册");
|
||||
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
setSize(550, 500);
|
||||
setLocationRelativeTo(null);
|
||||
setResizable(false);
|
||||
|
||||
JPanel mainPanel = new JPanel(new BorderLayout(10, 10));
|
||||
mainPanel.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20));
|
||||
|
||||
// Title
|
||||
JLabel titleLabel = new JLabel("用户注册", JLabel.CENTER);
|
||||
titleLabel.setFont(new Font("微软雅黑", Font.BOLD, 24));
|
||||
mainPanel.add(titleLabel, BorderLayout.NORTH);
|
||||
|
||||
// Form panel - 增加用户名字段
|
||||
JPanel formPanel = new JPanel(new GridLayout(8, 2, 10, 10));
|
||||
|
||||
JLabel usernameLabel = new JLabel("用户名:");
|
||||
usernameLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
usernameField = new JTextField();
|
||||
|
||||
JLabel emailLabel = new JLabel("邮箱:");
|
||||
emailLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
emailField = new JTextField();
|
||||
|
||||
JLabel codeLabel = new JLabel("注册码:");
|
||||
codeLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
codeField = new JTextField();
|
||||
|
||||
JLabel passwordLabel = new JLabel("密码:");
|
||||
passwordLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
passwordField = new JPasswordField();
|
||||
|
||||
JLabel confirmPasswordLabel = new JLabel("确认密码:");
|
||||
confirmPasswordLabel.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
confirmPasswordField = new JPasswordField();
|
||||
|
||||
JButton sendCodeButton = new JButton("发送注册码");
|
||||
sendCodeButton.setFont(new Font("微软雅黑", Font.PLAIN, 12));
|
||||
|
||||
JButton registerButton = new JButton("完成注册");
|
||||
registerButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
|
||||
// 布局表单
|
||||
formPanel.add(usernameLabel);
|
||||
formPanel.add(usernameField);
|
||||
formPanel.add(emailLabel);
|
||||
formPanel.add(emailField);
|
||||
formPanel.add(sendCodeButton);
|
||||
formPanel.add(new JLabel());
|
||||
formPanel.add(codeLabel);
|
||||
formPanel.add(codeField);
|
||||
formPanel.add(passwordLabel);
|
||||
formPanel.add(passwordField);
|
||||
formPanel.add(confirmPasswordLabel);
|
||||
formPanel.add(confirmPasswordField);
|
||||
|
||||
formPanel.add(registerButton);
|
||||
|
||||
mainPanel.add(formPanel, BorderLayout.CENTER);
|
||||
|
||||
// Back button
|
||||
JButton backButton = new JButton("返回登录");
|
||||
backButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
backButton.addActionListener(e -> navigationService.showLoginView()); // 修改
|
||||
|
||||
JPanel bottomPanel = new JPanel(new FlowLayout());
|
||||
bottomPanel.add(backButton);
|
||||
mainPanel.add(bottomPanel, BorderLayout.SOUTH);
|
||||
|
||||
// Add action listeners
|
||||
sendCodeButton.addActionListener(new SendCodeAction());
|
||||
registerButton.addActionListener(new RegisterAction());
|
||||
|
||||
add(mainPanel);
|
||||
}
|
||||
|
||||
private class SendCodeAction implements ActionListener {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
String username = usernameField.getText().trim();
|
||||
String email = emailField.getText().trim();
|
||||
|
||||
if (username.isEmpty() || email.isEmpty()) {
|
||||
JOptionPane.showMessageDialog(RegisterView.this,
|
||||
"请输入用户名和邮箱", "错误", JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
String result = userController.registerUser(username, email);
|
||||
JOptionPane.showMessageDialog(RegisterView.this, result);
|
||||
|
||||
if (result.contains("发送")) {
|
||||
currentUsername = username;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private class RegisterAction implements ActionListener {
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
String username = usernameField.getText().trim();
|
||||
String code = codeField.getText().trim();
|
||||
String password = new String(passwordField.getPassword());
|
||||
String confirmPassword = new String(confirmPasswordField.getPassword());
|
||||
|
||||
if (username.isEmpty() || code.isEmpty() || password.isEmpty() || confirmPassword.isEmpty()) {
|
||||
JOptionPane.showMessageDialog(RegisterView.this,
|
||||
"请填写所有字段", "错误", JOptionPane.ERROR_MESSAGE);
|
||||
return;
|
||||
}
|
||||
|
||||
String result = userController.completeRegistration(username, code, password, confirmPassword);
|
||||
|
||||
if (result.equals("注册成功!")) {
|
||||
JOptionPane.showMessageDialog(RegisterView.this,
|
||||
result, "成功", JOptionPane.INFORMATION_MESSAGE);
|
||||
navigationService.showLoginView(); // 修改
|
||||
} else {
|
||||
JOptionPane.showMessageDialog(RegisterView.this,
|
||||
result, "错误", JOptionPane.ERROR_MESSAGE);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,79 +0,0 @@
|
||||
package view;
|
||||
|
||||
import controller.NavigationController;
|
||||
import controller.NavigationService;
|
||||
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JLabel;
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.BorderFactory;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.FlowLayout;
|
||||
import java.awt.Font;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
public class ResultView extends JFrame {
|
||||
private JLabel scoreLabel;
|
||||
private JLabel percentageLabel;
|
||||
private NavigationService navigationService;
|
||||
|
||||
public ResultView() {
|
||||
navigationService = NavigationController.getInstance(); // 新增
|
||||
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));
|
||||
|
||||
// Title
|
||||
JLabel titleLabel = new JLabel("考试结果", JLabel.CENTER);
|
||||
titleLabel.setFont(new Font("微软雅黑", Font.BOLD, 24));
|
||||
mainPanel.add(titleLabel, BorderLayout.NORTH);
|
||||
|
||||
// Result panel
|
||||
JPanel resultPanel = new JPanel(new GridLayout(2, 1, 10, 10));
|
||||
|
||||
scoreLabel = new JLabel("", JLabel.CENTER);
|
||||
scoreLabel.setFont(new Font("微软雅黑", Font.PLAIN, 18));
|
||||
|
||||
percentageLabel = new JLabel("", JLabel.CENTER);
|
||||
percentageLabel.setFont(new Font("微软雅黑", Font.PLAIN, 18));
|
||||
|
||||
resultPanel.add(scoreLabel);
|
||||
resultPanel.add(percentageLabel);
|
||||
mainPanel.add(resultPanel, BorderLayout.CENTER);
|
||||
|
||||
// Button panel
|
||||
JPanel buttonPanel = new JPanel(new FlowLayout());
|
||||
JButton continueButton = new JButton("继续做题");
|
||||
JButton exitButton = new JButton("退出系统");
|
||||
|
||||
continueButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
exitButton.setFont(new Font("微软雅黑", Font.PLAIN, 14));
|
||||
|
||||
buttonPanel.add(continueButton);
|
||||
buttonPanel.add(exitButton);
|
||||
mainPanel.add(buttonPanel, BorderLayout.SOUTH);
|
||||
|
||||
// Add action listeners
|
||||
continueButton.addActionListener(e -> navigationService.showMainView()); // 修改
|
||||
exitButton.addActionListener(e -> System.exit(0));
|
||||
|
||||
add(mainPanel);
|
||||
}
|
||||
|
||||
public void setResults(int score, int total, double percentage) {
|
||||
scoreLabel.setText(String.format("得分: %d / %d", score, total));
|
||||
percentageLabel.setText(String.format("正确率: %.1f%%", percentage));
|
||||
}
|
||||
}
|
||||
Loading…
Reference in new issue