Java——实验14 图形用户界面设计(1)
1.实验目的
掌握处理ActionEvent事件。
2.实验介绍
处理事件时,要很好地掌握事件源、监视器、处理事件的接口之间的关系。事件源是能够产生事件的对象,如文本框、按钮、下扣式列表等。事件源通过调用相应的方法将某个对象作为自己的监视器,事件源增加监视的方法addXXXListener(XXXListenerlistener)中的参数是一个接口,listener可以引用任何实现了该接口的装所创建的对象做为事件源的监视器,当事件源发生事件时,接口listener立即调用被类实现的接口中的某个方法,即监视器负责处理事件源发生的事件。
3.实验内容
编写一个算术测试小软件,用来训练小学生的算术能力。程序由3 个类组成,其中Teacher对象充当监视器,负责给出算术题比 并判断回答者的答案是否正确;ComputerFrame对象负责为算术题目提供视图,比如用户可以通过ComputerFrame对象提供的GUI界面看到题目,并通过该GUl界面给出题目的答案;MailClass是软件的主类。
实验代码
ComputerFrame.java
package text14;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ComputerFrame extends JFrame {
JMenuBar menubar;
JMenu choiceGrade;
JMenuItem grade1, grade2,grade3;
JTextField textOne, textTwo, textResult;
JButton getProblem, giveAnswer;
JLabel operatorLabel, message;
Teacher teacherzhang;
ComputerFrame() {
teacherzhang = new Teacher();
teacherzhang.setMaxInteger(100);
setLayout(new FlowLayout());
menubar = new JMenuBar();
choiceGrade = new JMenu("选择级别");
grade1 = new JMenuItem("幼儿级别");
grade2 = new JMenuItem("儿童级别");
grade3 = 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);
}
});
grade3.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
teacherzhang.setMaxInteger(200);
}
});
choiceGrade.add(grade1);
choiceGrade.add(grade2);
choiceGrade.add(grade3);
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);
}
}
MailClass.java
package text14;
public class MainClass {
public static void main(String[] args) {
ComputerFrame frame;
frame = new ComputerFrame();
frame.setTitle("算数测试");
frame.setBounds(100, 100, 650, 180);
}
}
Teacher.java
package text14;
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];
}
}
实验结果


