小学数学算数出题器
所需相关知识:
GUI相关的类,组件的属性及功能,事件源、监视器、处理事件的接口
代码如下:
MainCLASS.java
package Three;
public class MainCLASS {
public static void main(String[] args) {
Computer COM =new Computer();
COM.setBounds(100,100,650,180);
COM.setTitle("算数测试");
}
}
Computer.java
package Three;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Computer extends JFrame{
JMenuBar menuBar;
JMenu choiceGrade;
JMenuItem Grade1,Grade2;
JTextField text1,text2,textResult;
JButton getQuestion,giveAnswer;
JComboBox <String> choiceFuhao;
JLabel message;
OperatorListener operator;// 监视器ItemEvent事件的监视器
Count count;
Computer(){
choiceFuhao = new JComboBox<>();
choiceFuhao.addItem("选择符号");
String []a = {"+","-","*","/"};
for (int i=0;i<a.length;i++){
choiceFuhao.addItem(a[i]);
}
setLayout(new FlowLayout());
menuBar = new JMenuBar();
choiceGrade = new JMenu("选择难度");
Grade1 = new JMenuItem("简单难度");
Grade2 = new JMenuItem("困难难度");
Grade1.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
count.setMaxInteger(10); //简单难度为10以内的算数
}
});
Grade2.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
count.setMaxInteger(100); //困难难度为100以内的算数
}
});
choiceGrade.add(Grade1);
choiceGrade.add(Grade2);
menuBar.add(choiceGrade);
setJMenuBar(menuBar);
text1 = new JTextField(8);
text2 = new JTextField(8);
textResult = new JTextField(8);
message = new JLabel("你还没回答题目");
getQuestion = new JButton("获取题目");
giveAnswer = new JButton("获得答案");
add(text1);
add(choiceFuhao);
add(text2);
add(new Label("="));
add(textResult);
add(giveAnswer);
add(message);
add(getQuestion);
textResult.requestFocus();
text1.setEditable(false);
text2.setEditable(false);
getQuestion.setActionCommand("getQuestion");
textResult.setActionCommand("answer");
giveAnswer.setActionCommand("answer");
operator = new OperatorListener();
count = new Count();
operator.setCom(this);
choiceFuhao.addItemListener(operator);
count.setJTextField(text1, text2, textResult);
count.setJLabel(message);
getQuestion.addActionListener(count);
giveAnswer.addActionListener(count);
textResult.addActionListener(count);
setVisible(true);
validate();
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
}
Count.java
// package Three;
import javax.swing.*;
import java.awt.event.*;
import java.util.Random;
public class Count implements ActionListener {
int number1,number2;
String fuhao;
int maxInteger;
JTextField text1,text2,textResult;
JLabel message;
public void setFuhao(String s){
fuhao = s;
}
public void setMaxInteger(int n){
maxInteger = n;
}
public void actionPerformed(ActionEvent e){
Random random = new Random();
String str = e.getActionCommand();
if (str.equals("getQuestion")){
number1=random.nextInt(maxInteger)+1;
number2=random.nextInt(maxInteger)+1;
text1.setText(""+number1);
text2.setText(""+number2);
message.setText("请回答");
textResult.setText(null);
}
else if(str.equals("answer")){
String answer = textResult.getText();
try {
int result = Integer.parseInt(answer);
if (fuhao.equals("+")){
if(result == number1 + number2){
message.setText("你回答正确");
}
else message.setText("你回答错误");
}
else if (fuhao.equals("-")){
if(result == number1 - number2){
message.setText("你回答正确");
}
else message.setText("你回答错误");
}
else if (fuhao.equals("*")){
if(result == number1 * number2){
message.setText("你回答正确");
}
else message.setText("你回答错误");
}
else if (fuhao.equals("/")){
if(result == number1 /number2){
message.setText("你回答正确");
}
else message.setText("你回答错误");
}
}
catch (NumberFormatException ex){
message.setText("请输入答案");
}
}
}
public void setJTextField(JTextField...t){
text1=t[0];
text2=t[1];
textResult=t[2];
}
public void setJLabel(JLabel...label){
message=label[0];
}
}
OperatorListener.java
// package Three;
import java.awt.event.*;
public class OperatorListener implements ItemListener{
Computer com;
public void setCom(Computer com){
this.com = com;
}
public void itemStateChanged(ItemEvent e){
String fuhao = com.choiceFuhao.getSelectedItem().toString();
com.count.setFuhao(fuhao);
}
}
运行效果:
简单难度加法:
困难难度加法:
简单乘法
困难乘法: