Java GUI编程完成算数测试

一,题目要求

编写一个算术测试小软件,用来训练小学生的算术能力。程序由3个类组成,其中Teacher类对象负责给出算术题目,并判断回答者的答案是否正确:ComputerFrame类对象提供的GUI界面看到题目并通过该GUI界面给出题目的答案;MailClass是主类。

二,题目要求

运行结果如下图所示。图中标出了各个组件的变量名称:

运行结果如图所示。图中标出了各个组件的变量名称:

  

点击“确认答案”后,如果输入答案错误,显示:“你回答错误”,如果答案正确,显示“你回答正确”,如果输入的不是数字,显示“请输入数字字符

三,代码展示

Teacher

public class Teacher {
    int numberOne,numberTwo;
    String operator="";
    boolean right;

    public int giveNumberOne(int n){
        numberOne=(int)(Math.random()*n)+1;
        return numberOne;
    }

    public int giveNumberTwo(int n){
        numberTwo=(int)(Math.random()*n)+1;
        return numberTwo;
    }

    public String giveOperator(){
        double d=Math.random();
        if(d>=0.8)
            operator="+";
        else if(d<0.8&&d>0.5)
            operator="-";
        else if(d<=0.5&&d>0.2)
            operator="*";
        else if(d<=0.2)
            operator="/";
        return operator;
    }

    public boolean getRight(int answer){
        if(operator.equals("+")){
            if(answer==numberOne+numberTwo)
                right=true;
            else
                right=false;
        }
        else if(operator.equals("-")){
            if(answer==numberOne-numberTwo)
                right=true;
            else
                right=false;
        }
        else if(operator.equals("*")){
            if(answer==numberOne*numberTwo)
                right=true;
            else
                right=false;
        }
        else if(operator.equals("/")){
            if(answer==numberOne/numberTwo)
                right=true;
            else
                right=false;
        }
        return right;
    }
}

 ComputerFrame

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;

import javax.swing.*;

public class ComputerJFrame extends JFrame implements ActionListener{
    JTextField textOne,textTwo,textResult;
    JButton getProblem,giveAnswer;
    JLabel operatorLabel,message;
    Teacher teacher;

    ComputerJFrame(String s){
        super(s);
        teacher = new Teacher();
        setLayout(new FlowLayout());
        textOne = new JTextField(10);
        textTwo = new JTextField(10);
        textResult = new JTextField(10);
        operatorLabel = new JLabel("+");  //创建 operatorLabel,初始值“+”
        message = new JLabel("你还没有回答呢");   //创建message,初始值“你还没有回答呢”
        getProblem = new JButton("获取题目"); //创建getProblem,初始值“获取题目”
        giveAnswer = new JButton("确认答案"); //创建giveAnswer,初始值“确认答案”
        //【代码9】//添加若干组件到窗口
        add(getProblem);
        add(textOne);
        add(operatorLabel);
        add(textTwo);
        add(new JLabel("="));
        add(textResult);
        add(giveAnswer);
        add(message);
        textResult.requestFocus();
        textOne.setEditable(false);
        textTwo.setEditable(false);
        getProblem.addActionListener(this);
        //将当前窗口注册为getProblem的ActionEvent事件监视器
        giveAnswer.addActionListener(this);
        //将当前窗口注册为giveAnwser的ActionEvent事件监视器
        textResult.addActionListener(this);
        //将当前窗口注册为textResult的ActionEvent事件监视器
        setBounds(100,100,450,100);
        //设置出现屏幕上时的初始位置,x=100,y=100,width=450,height=100
        setLocationRelativeTo(null);
        //设置窗体居中显示
        setVisible(true);
        //窗口的可见性设置
        validate();
        addWindowFocusListener(new WindowAdapter(){
                                   public void windowClosing(WindowEvent e){
                                       System.exit(0);
                                   }
                               }
        );
    }

    public void actionPerformed(ActionEvent e){
        if(e.getSource() == getProblem)
        {
            int number1 = teacher.giveNumberOne(10);
            //获取第一个操作数的值
            int number2 = teacher.giveNumberTwo(10);
            //获取第二个操作数的值
            String operator = teacher.giveOperator();
            //获取运算符
            textOne.setText(""+number1);
            textTwo.setText(""+number2);
            textResult.setText(null);
            operatorLabel.setText(operator);
            message.setText("请回答");
            //设置图形界面上文本框以及标签的文本,包括:textOne,textTwo,textResult,operatorLabel,message
        }
        if(e.getSource() == giveAnswer)
        {
            String answer = textResult.getText();
            //获取文本框中输入的答案
            try{
                int result = Integer.parseInt(answer);
                if(teacher.getRight(result) == true)
                    message.setText("你回答正确");
                else{
                    message.setText("你回答错误");
                }
    	    //如果答案正确,message显示“你回答正确”,如果不正确,显示“你回答错误”
            }
            catch(NumberFormatException ex){
                message.setText("请输入数字字符");
                //如果输入的不是数字,显示“请输入数字字符”
            }
        }
        textResult.requestFocus();
        //textResult 获得焦点
        validate();
    }
}
public class MainClass {
    public static void main(String[] args) {
        ComputerJFrame frame;
        frame = new ComputerJFrame("算术测试");
    }
}

四,运行结果如下

   

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

王捷列夫.

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值