JAVA实验报告
课程名称 java实验 实验名称 JAVA Swing 图形用户界面和对话框
学 院__计算机学院__ 专业班级__软件 __ 姓 名__ ____ 学号_ __实验日期:2015年4月30 日
一.实验目的
(1) 学习处理ActionEven事件; (2) 学习使用布局类;
(3) 学习焦点、鼠标和键盘事件; (4) 学习使用对话框。
二.实验内容
(-)实验题目一:算术测试 ,编写一个算术测试小软件,用来训练小学生的算术能力。
1.要点分析: 程序有三个类组成,其中Teacher对象充当监视器,负责给出算术题目,并判断回答者的答案是否正确。ComputerFrame对象负责为算术题目提供视图,比如用户可以通过ComputerFrame对象提供的GUI界面给出题目的答案;MainClass是软件的主类。 2.程序源代码:
package 算术测试;
public class MainClass {
public static void main(String args[]){ ComputerFrame frame;
frame=new ComputerFrame(); frame.setTitle(\算术测试\);
frame.setBounds(100,100,650,180); } }
package 算术测试; import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class ComputerFrame extends JFrame {
1
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);//创建文本框,其可见字符长为5 textTwo=new JTextField(5); textResult=new JTextField(5); operatorLabel=new JLabel(\);
operatorLabel.setFont(new Font(\,Font.BOLD,20)); message=new JLabel(\你还没有回答呢\); getProblem=new JButton(\获取题目\); giveAnswer=new JButton(\确认答案\); add(getProblem); add(textOne);
add(operatorLabel); add(textTwo);
add(new JLabel(\)); add(textResult);
2
add(giveAnswer); add(message);
textResult.requestFocus(); textOne.setEditable(false); textTwo.setEditable(false);
getProblem.setActionCommand(\); textResult.setActionCommand(\); giveAnswer.setActionCommand(\);
teacherZhang.setJTextField(textOne,textTwo,textResult); teacherZhang.setJLabel(operatorLabel,message); getProblem.addActionListener(teacherZhang); giveAnswer.addActionListener(teacherZhang); textResult.addActionListener(teacherZhang); setVisible(true); validate();
setDefaultCloseOperation(DISPOSE_ON_CLOSE); } }
package 算术测试;
import java.util.Random; import java.awt.event.*; import javax.swing.*;
public class Teacher implements ActionListener{ int numberOne,numberTwo; String operator=\; boolean isRigth; 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~最大整数之间的随机数
numberTwo=random.nextInt(maxInteger)+1; double d=Math.random();//获取0~1之间的随机数
3
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(\)){
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]; } }
4
3.实验结果:
4.实验后练习:
(1)模仿本实验的代码,再增加小学生级别。 (2)给上述程序增加测试乘法的功能。 (二)实验题目二: 布局与日历。
1.要点分析: 设置一个窗口,该窗口的布局为BorderLayout布局。窗口的中心添加一个JPanel容器pCenter,pCenter的布局是7行7列的GridLayout布局,pCenter中放置49个标签,用来显示日历。窗口的北面添加一个JPanel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:nextMonth和previousMonth,单击nextMonth按钮,可以显示当前月的下一月日历;单击previousMonth按钮,可以显示当前月的上一月的日历。 2.程序源代码:
package 布局与日历;
public class CalendarMainClass {
public static void main(String args[]){
CalendarFrame frame=new CalendarFrame(); frame.setBounds(100,100,360,300); frame.setVisible(true);
frame.setYearAndMonth(2015,5); } }
package 布局与日历; import java.util.*; import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.border.*;
5