TestPanel

package com.shrimpking.t6;

import java.awt.*;

/**
 * Created by IntelliJ IDEA.
 *
 * @Author : Shrimpking
 * @create 2024/9/23 15:42
 */
//ch18-4
public class TestPanel
{
    public static void main(String[] args)
    {
        Frame frame = new Frame("Hello Java");
        Panel panel = new Panel();
        panel.add(new TextField(20)); //添加文本框
        panel.add(new Button("Click me!")); //按钮

        frame.add(panel); //加入到frame中
        frame.setBounds(50,50,500,300);
        frame.setVisible(true);
    }
}

好的,这是一个比较完整的Java项目,需要用到Swing GUI库实现界面。我会提供代码框架和思路,您可以根据自己的理解和需求进行修改和完善。 首先,我们需要定义一个题目类,包含两个整数和运算符: ```java public class Question { private int num1; private int num2; private char operator; public Question(int num1, int num2, char operator) { this.num1 = num1; this.num2 = num2; this.operator = operator; } public int getNum1() { return num1; } public int getNum2() { return num2; } public char getOperator() { return operator; } public int getAnswer() { int answer = 0; switch (operator) { case '+': answer = num1 + num2; break; case '-': answer = num1 - num2; break; case '*': answer = num1 * num2; break; case '/': answer = num1 / num2; break; } return answer; } } ``` 然后,我们需要在GUI中显示10个随机生成的题目,并让用户输入答案。这里使用JPanel和JTextField来显示题目和输入答案: ```java public class TestPanel extends JPanel { private List<Question> questions; private List<JTextField> answerFields; private JLabel[] questionLabels; public TestPanel(List<Question> questions) { this.questions = questions; answerFields = new ArrayList<>(); questionLabels = new JLabel[10]; setLayout(new GridLayout(10, 1)); for (int i = 0; i < 10; i++) { Question question = questions.get(i); JLabel label = new JLabel(question.getNum1() + " " + question.getOperator() + " " + question.getNum2() + " = "); JTextField answerField = new JTextField(5); answerFields.add(answerField); JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); panel.add(label); panel.add(answerField); questionLabels[i] = label; add(panel); } } public List<Integer> getAnswers() { List<Integer> answers = new ArrayList<>(); for (JTextField answerField : answerFields) { String answerStr = answerField.getText().trim(); int answer = answerStr.isEmpty() ? 0 : Integer.parseInt(answerStr); answers.add(answer); } return answers; } public void showAnswers(List<Integer> answers) { for (int i = 0; i < 10; i++) { Question question = questions.get(i); JLabel label = questionLabels[i]; int answer = question.getAnswer(); int userAnswer = answers.get(i); if (userAnswer == answer) { label.setText(question.getNum1() + " " + question.getOperator() + " " + question.getNum2() + " = " + userAnswer + " (正确)"); } else { label.setText(question.getNum1() + " " + question.getOperator() + " " + question.getNum2() + " = " + userAnswer + " (错误,正确答案为" + answer + ")"); } } } } ``` 接下来,我们需要在GUI中添加按钮,实现提交答案、重做、另做一套题、查看记录和退出测试的功能。 ```java public class TestFrame extends JFrame { private TestPanel testPanel; private JButton submitButton; private JButton redoButton; private JButton newTestButton; private JButton historyButton; private JButton exitButton; public TestFrame() { setTitle("数学测试"); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setSize(400, 400); List<Question> questions = generateQuestions(); testPanel = new TestPanel(questions); add(testPanel, BorderLayout.CENTER); JPanel buttonPanel = new JPanel(new FlowLayout()); submitButton = new JButton("提交答案"); submitButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { List<Integer> answers = testPanel.getAnswers(); testPanel.showAnswers(answers); int totalScore = calculateScore(answers); String level = getLevel(totalScore); JOptionPane.showMessageDialog(TestFrame.this, "您的得分为" + totalScore + ",等级为" + level + "。"); } }); buttonPanel.add(submitButton); redoButton = new JButton("重做"); redoButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { reset(); } }); buttonPanel.add(redoButton); newTestButton = new JButton("另做一套"); newTestButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { List<Question> newQuestions = generateQuestions(); testPanel.removeAll(); testPanel.add(new TestPanel(newQuestions)); testPanel.revalidate(); testPanel.repaint(); } }); buttonPanel.add(newTestButton); historyButton = new JButton("查看记录"); historyButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO: 实现查看记录功能 } }); buttonPanel.add(historyButton); exitButton = new JButton("退出测试"); exitButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); buttonPanel.add(exitButton); add(buttonPanel, BorderLayout.SOUTH); } private List<Question> generateQuestions() { List<Question> questions = new ArrayList<>(); Random random = new Random(); for (int i = 0; i < 10; i++) { int num1 = random.nextInt(100); int num2 = random.nextInt(100); char operator = "+-*/".charAt(random.nextInt(4)); if (operator == '-') { while (num2 > num1) { num2 = random.nextInt(100); } } else if (operator == '/') { while (num2 == 0 || num1 % num2 != 0) { num2 = random.nextInt(100) + 1; } } questions.add(new Question(num1, num2, operator)); } return questions; } private int calculateScore(List<Integer> answers) { int totalScore = 0; for (int i = 0; i < 10; i++) { Question question = testPanel.questions.get(i); int answer = question.getAnswer(); int userAnswer = answers.get(i); if (userAnswer == answer) { totalScore += 10; } } return totalScore; } private String getLevel(int score) { if (score < 60) { return "不及格"; } else if (score < 70) { return "及格"; } else if (score < 80) { return "中"; } else if (score < 90) { return "良"; } else { return "优"; } } private void reset() { List<Question> questions = generateQuestions(); testPanel.removeAll(); testPanel.add(new TestPanel(questions)); testPanel.revalidate(); testPanel.repaint(); } public static void main(String[] args) { TestFrame frame = new TestFrame(); frame.setVisible(true); } } ``` 这样,一个简单的数学测试程序就完成了。您可以根据自己的需求进行修改和完善。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虾米大王

有你的支持,我会更有动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值