上机实践9 组件及事件处理,算术测试

实验1 算术测试
实验要求
编写一个算术测试的小软件,用来训练小学生的算术能力。程序由3个类组成,其中Teacher对象充当监视器,负责给出算术题目,并判断回答者的答案是否正确,ComputerFrame对象负责为算术题目提供视图,比如用户可以通过ComputerFrame对象提供的GUI界面看到题目,并通过该GUI界面给出题目的答案,MainClass是软件主类。
MainClass.java类

package 算术测试;

public class MainClass {
    public static void main(String[] args) {
        ComputerFrame frame;
        frame = new ComputerFrame();
        frame.setTitle("算数测试");
        frame.setBounds(100, 100, 650, 180);
    }


}

ComputerFrame.java

package 算术测试;


import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

    public class ComputerFrame extends JFrame {
        JMenuBar menubar;
        JMenu choiceGrade;
        JMenuItem grade1, grade2;
        JTextField textOne, textTwo, textResult;
        JButton getProblem, giveAnswer;
        JLabel operatorLabel, message;
        Teacher teacherzhang;

        ComputerFrame() {
            teacherzhang = new Teacher();
            teacherzhang.setMaxInteger(20);
            setLayout(new FlowLayout());
            menubar = new JMenuBar();
            choiceGrade = new JMenu("选择级别");
            grade1 = new JMenuItem("幼儿级别");
            grade2 = new JMenuItem("儿童级别");
            grade1.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    teacherzhang.setMaxInteger(10);
                }
            });
            grade2.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    teacherzhang.setMaxInteger(50);
                }
            });
            choiceGrade.add(grade1);
            choiceGrade.add(grade2);
            menubar.add(choiceGrade);
            setJMenuBar(menubar);
            textOne = new JTextField(5);
            textTwo = new JTextField(5);
            textResult = new JTextField(5);
            operatorLabel = new JLabel("+");
            operatorLabel.setFont(new Font("Arial", Font.BOLD, 20));
            message = new JLabel("你还没有回答");
            getProblem = new JButton("获取题目");
            giveAnswer = new JButton("确认答案");
            add(textOne);
            add(operatorLabel);
            add(textTwo);
            add(new JLabel("="));
            add(textResult);
            add(giveAnswer);
            add(message);
            add(getProblem);
            textResult.requestFocus();
            textOne.setEditable(false);
            textTwo.setEditable(false);
            getProblem.setActionCommand("getProblem");
            textResult.setActionCommand("answer");
            giveAnswer.setActionCommand("answer");
            teacherzhang.setJTextField(textOne, textTwo, textResult);
            teacherzhang.setJLabel(operatorLabel, message);
            getProblem.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    teacherzhang.actionPerformed(e);
                }
            });
            giveAnswer.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    teacherzhang.actionPerformed(e);
                }
            });
            textResult.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    teacherzhang.actionPerformed(e);
                }
            });
            setVisible(true);
            validate();
            setDefaultCloseOperation(DISPOSE_ON_CLOSE);
        }

    }


Teacher.java

package 算术测试;


    import java.awt.*;
import java.awt.event.*;
import java.util.Random;

import javax.swing.*;

    public class Teacher {
        int numberOne, numberTwo;
        String operator = "";
        boolean isRight;
        Random random;
        int maxInteger;
        JTextField textOne, textTwo, textResult;
        JLabel operatorLabel, message;

        Teacher() {
            random = new Random();
        }

        public void setMaxInteger(int n) {
            maxInteger = n;
        }

        public void actionPerformed(ActionEvent e) {
            String str = e.getActionCommand();
            if (str.equals("getProblem")) {
                numberOne = random.nextInt(maxInteger) + 1;
                numberTwo = random.nextInt(maxInteger) + 1;
                double d = Math.random();
                if (d >= 0.5)
                    operator = "+";
                else
                    operator = "-";
                textOne.setText("" + numberOne);
                textTwo.setText("" + numberTwo);
                operatorLabel.setText(operator);
                message.setText("请回答");
                textResult.setText(null);
            } else if (str.equals("answer")) {
                String answer = textResult.getText();
                try {
                    int result = Integer.parseInt(answer);
                    if (operator.equals("+")) {
                        if (result == numberOne + numberTwo)
                            message.setText("你的回答正确");
                        else
                            message.setText("你的回答错误");
                    } else if (operator.equals("-")) {
                        if (result == numberOne - numberTwo)
                            message.setText("你的回答正确");
                        else
                            message.setText("你的回答错误");
                    }
                } catch (NumberFormatException ex) {
                    message.setText("请输入数字字符");
                }
            }
        }

        public void setJTextField(JTextField... t) {
            textOne = t[0];
            textTwo = t[1];
            textResult = t[2];
        }

        public void setJLabel(JLabel... label) {
            operatorLabel = label[0];
            message = label[1];
        }
    }


运行结果

更多推荐

Java2实用教程(第6版)实验指导与习题解答