From 6b9d91454116f6eb990a59e08f03cf59b0ede675 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=98=9F=E5=AE=87?= <974058674@qq.com> Date: Sat, 11 Oct 2025 22:52:59 +0800 Subject: [PATCH] finalcommit --- src/MainFrame.java | 120 ++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 112 insertions(+), 8 deletions(-) diff --git a/src/MainFrame.java b/src/MainFrame.java index 79b514d..2367b32 100644 --- a/src/MainFrame.java +++ b/src/MainFrame.java @@ -7,6 +7,8 @@ import Base.Question; import javax.swing.*; import java.awt.*; +import java.util.List; + public class MainFrame extends JFrame { private final User_service userService; private Exam_service examService; @@ -49,13 +51,13 @@ public class MainFrame extends JFrame { createGradeSelectionPanel(); createExamPanel(); createResultPanel(); + createWrongQuestionsPanel(); // 新增错题面板 createPasswordChangePanel(); add(mainPanel); showLoginPanel(); } - // 其他面板创建方法保持不变... private void createLoginPanel() { JPanel panel = new JPanel(new BorderLayout(10, 10)); panel.setBorder(BorderFactory.createEmptyBorder(50, 100, 50, 100)); @@ -254,19 +256,58 @@ public class MainFrame extends JFrame { JPanel buttonPanel = new JPanel(new FlowLayout(FlowLayout.CENTER, 30, 20)); + // 新增查看错题按钮 + JButton reviewButton = createStyledButton("查看错题"); + reviewButton.addActionListener(e -> showWrongQuestions()); + buttonPanel.add(reviewButton); + JButton continueButton = createStyledButton("继续做题"); continueButton.addActionListener(e -> showGradeSelectionPanel()); + buttonPanel.add(continueButton); JButton exitButton = createStyledButton("退出程序"); exitButton.addActionListener(e -> System.exit(0)); - - buttonPanel.add(continueButton); buttonPanel.add(exitButton); + panel.add(buttonPanel, BorderLayout.SOUTH); mainPanel.add(panel, "Result"); } + private void createWrongQuestionsPanel() { + JPanel panel = new JPanel(new BorderLayout(10, 10)); + panel.setBorder(BorderFactory.createEmptyBorder(20, 40, 20, 40)); + + // 标题 + JLabel titleLabel = new JLabel("错题回顾", JLabel.CENTER); + titleLabel.setFont(new Font("微软雅黑", Font.BOLD, 20)); + panel.add(titleLabel, BorderLayout.NORTH); + + // 错题内容区域(使用滚动面板) + JTextArea wrongQuestionsArea = new JTextArea(); + wrongQuestionsArea.setFont(new Font("微软雅黑", Font.PLAIN, 14)); + wrongQuestionsArea.setEditable(false); + wrongQuestionsArea.setLineWrap(true); + wrongQuestionsArea.setWrapStyleWord(true); + + JScrollPane scrollPane = new JScrollPane(wrongQuestionsArea); + scrollPane.setBorder(BorderFactory.createEmptyBorder(20, 20, 20, 20)); + panel.add(scrollPane, BorderLayout.CENTER); + + // 存储错题文本区域引用 + panel.putClientProperty("wrongQuestionsArea", wrongQuestionsArea); + + // 返回按钮 + JPanel bottomPanel = new JPanel(new FlowLayout(FlowLayout.CENTER)); + JButton backButton = createStyledButton("返回成绩"); + backButton.addActionListener(e -> showResultPanel()); + bottomPanel.add(backButton); + + panel.add(bottomPanel, BorderLayout.SOUTH); + + mainPanel.add(panel, "WrongQuestions"); + } + private void createPasswordChangePanel() { JPanel panel = new JPanel(new BorderLayout(10, 10)); panel.setBorder(BorderFactory.createEmptyBorder(50, 100, 50, 100)); @@ -365,6 +406,10 @@ public class MainFrame extends JFrame { cardLayout.show(mainPanel, "Result"); } + private void showWrongQuestionsPanel() { + cardLayout.show(mainPanel, "WrongQuestions"); + } + // 业务逻辑方法 private void login() { String id = loginIdField.getText().trim(); @@ -442,7 +487,6 @@ public class MainFrame extends JFrame { } } - // 关键修改:使用Question类的实际方法 private void showCurrentQuestion() { Question question = examService.get_now_question(); if (question != null) { @@ -452,17 +496,14 @@ public class MainFrame extends JFrame { questionNumberLabel.setText(String.format("第 %d 题 / 共 %d 题", currentIndex + 1, totalQuestions)); - // 使用Question类的toString()方法显示题目 questionLabel.setText("