Java程序设计 - 试验6(学生版) - 下载本文

华北电力大学

| || |

实 验 报 告

实验名称 Application及Applet程序设计 课程名称 Java程序设计 专业班级: 学生姓名: 学 号:

成 绩:

指导教师:张学斌 实验日期:

华 北 电 力 大 学 实 验 报 告

一、实验目的和要求 1掌握Java Swing 组件的使用方法; 2 理解委托代理事件处理模型掌握; 3 掌握窗口菜单和快捷菜单设计方式; 4 掌握在组件上绘图的方法; 5 掌握Applet应用程序的设计方法 二、实验环境 Windows2000/Windows XP,JDK 1.2~1.6 三、实验内容和步骤 要求按照实验内容,写出详细实验过程和步骤,必要时截图。 实验1 算术测试 1.实验要求 编写一个算术测试小软件,用来训练小学生的算术能力。程序有三个类组成,其中Teacher对象充当监视器,负责给出算术题目,并判断回答者的答案是否正确;ComputerFrame对象负责为算术题目提供视图,比如用户可以通过ComputerFrame对象提供的GUI界面看到题目,并通过GUI界面给出题目的答案;MailClass是软件的主类。 2.程序模板 MainClass.java public class MainClass { public static void main(String args[]) { ComputerFrame frame; frame=new ComputerFrame(); frame.setTitle(\算术测试\ frame.setBounds(100,100,650,180); } } ComputerFrame.java import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ComputerFrame extends JFrame { JMenuBar menubar; JMenu choiceGrade; //选择级别的菜单 第 2 页 共 21 页

华 北 电 力 大 学 实 验 报 告

JMenuItem grade1,grade2; JTextField textOne,textTwo,textResult; JButton getProblem,giveAnwser; 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); 【代码1】 //创建textOne,其可见字符长是5 textTwo=new JTextField(5); textResult=new JTextField(5); operatorLabel=new JLabel(\ operatorLabel.setFont(new Font(\ message=new JLabel(\你还没有回答呢\ getProblem=new JButton(\获取题目\ giveAnwser=new JButton(\确认答案\ add(getProblem); add(textOne); add(operatorLabel); add(textTwo); add(new JLabel(\ add(textResult); add(giveAnwser); add(message); textResult.requestFocus(); textOne.setEditable(false); 第 3 页 共 21 页

华 北 电 力 大 学 实 验 报 告

textTwo.setEditable(false); getProblem.setActionCommand(\ textResult.setActionCommand(\ giveAnwser.setActionCommand(\ teacherZhang.setJTextField(textOne,textTwo,textResult); teacherZhang.setJLabel(operatorLabel,message); 【代码2】//将teacherZhang注册为getProblem的ActionEvent事件监视器 【代码3】//将teacherZhang注册为giveAnwser的ActionEvent事件监视器 【代码4】//将teacherZhang注册为textResult的ActionEvent事件监视器 setVisible(true); validate(); setDefaultCloseOperation(DISPOSE_ON_CLOSE); } } Techaer.java import java.util.Random; import java.awt.event.*; import javax.swing.*; public class Teacher implements ActionListener { 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(\ numberOne = random.nextInt(maxInteger)+1;//1至maxInteger之间的随机数; numberTwo=random.nextInt(maxInteger)+1; double d=Math.random(); // 获取(0,1)之间的随机数 if(d>=0.5) operator=\ else operator=\ textOne.setText(\ textTwo.setText(\ operatorLabel.setText(operator); 第 4 页 共 21 页

华 北 电 力 大 学 实 验 报 告

message.setText(\请回答\ textResult.setText(null); } else if(str.equals(\ 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]; } } 3.实验指导 Jbutton对象可触发ActionEvent事件。为了能监视到此类事件,事件源必须使用addActionListener方法获得监视器,创建监视器的类必须实现接口ActionListener。 4.实验扩展 (1)模仿本实验代码,再增加“小学生”级别。 (2)给出上述程序增加测试乘法的功能。 第 5 页 共 21 页