Java程序设计试验6学生版汇编.docx
《Java程序设计试验6学生版汇编.docx》由会员分享,可在线阅读,更多相关《Java程序设计试验6学生版汇编.docx(30页珍藏版)》请在冰豆网上搜索。
Java程序设计试验6学生版汇编
华北电力大学
实验报告
|
|
实验名称Application及Applet程序设计
课程名称Java程序设计
|
|
专业班级:
学生姓名:
学号:
成绩:
指导教师:
张学斌实验日期:
一、实验目的和要求
1掌握JavaSwing组件的使用方法;
2理解委托代理事件处理模型掌握;
3掌握窗口菜单和快捷菜单设计方式;
4掌握在组件上绘图的方法;
5掌握Applet应用程序的设计方法
二、实验环境
Windows2000/WindowsXP,JDK1.2~1.6
三、实验内容和步骤
要求按照实验内容,写出详细实验过程和步骤,必要时截图。
实验1算术测试
1.实验要求
编写一个算术测试小软件,用来训练小学生的算术能力。
程序有三个类组成,其中Teacher对象充当监视器,负责给出算术题目,并判断回答者的答案是否正确;ComputerFrame对象负责为算术题目提供视图,比如用户可以通过ComputerFrame对象提供的GUI界面看到题目,并通过GUI界面给出题目的答案;MailClass是软件的主类。
2.程序模板
MainClass.java
publicclassMainClass{
publicstaticvoidmain(Stringargs[]){
ComputerFrameframe;
frame=newComputerFrame();
frame.setTitle("算术测试");
frame.setBounds(100,100,650,180);
}
}
ComputerFrame.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassComputerFrameextendsJFrame{
JMenuBarmenubar;
JMenuchoiceGrade;//选择级别的菜单
JMenuItemgrade1,grade2;
JTextFieldtextOne,textTwo,textResult;
JButtongetProblem,giveAnwser;
JLabeloperatorLabel,message;
TeacherteacherZhang;
ComputerFrame(){
teacherZhang=newTeacher();
teacherZhang.setMaxInteger(20);
setLayout(newFlowLayout());
menubar=newJMenuBar();
choiceGrade=newJMenu("选择级别");
grade1=newJMenuItem("幼儿级别");
grade2=newJMenuItem("儿童级别");
grade1.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
teacherZhang.setMaxInteger(10);
}
});
grade2.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
teacherZhang.setMaxInteger(50);
}
});
choiceGrade.add(grade1);
choiceGrade.add(grade2);
menubar.add(choiceGrade);
setJMenuBar(menubar);
【代码1】//创建textOne,其可见字符长是5
textTwo=newJTextField(5);
textResult=newJTextField(5);
operatorLabel=newJLabel("+");
operatorLabel.setFont(newFont("Arial",Font.BOLD,20));
message=newJLabel("你还没有回答呢");
getProblem=newJButton("获取题目");
giveAnwser=newJButton("确认答案");
add(getProblem);
add(textOne);
add(operatorLabel);
add(textTwo);
add(newJLabel("="));
add(textResult);
add(giveAnwser);
add(message);
textResult.requestFocus();
textOne.setEditable(false);
textTwo.setEditable(false);
getProblem.setActionCommand("getProblem");
textResult.setActionCommand("answer");
giveAnwser.setActionCommand("answer");
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
importjava.util.Random;
importjava.awt.event.*;
importjavax.swing.*;
publicclassTeacherimplementsActionListener{
intnumberOne,numberTwo;
Stringoperator="";
booleanisRight;
Randomrandom;//用于给出随机数
intmaxInteger;//题目中最大的整数
JTextFieldtextOne,textTwo,textResult;
JLabeloperatorLabel,message;
Teacher(){
random=newRandom();
}
publicvoidsetMaxInteger(intn){
maxInteger=n;
}
publicvoidactionPerformed(ActionEvente){
Stringstr=e.getActionCommand();
if(str.equals("getProblem")){
numberOne=random.nextInt(maxInteger)+1;//1至maxInteger之间的随机数;
numberTwo=random.nextInt(maxInteger)+1;
doubled=Math.random();//获取(0,1)之间的随机数
if(d>=0.5)
operator="+";
else
operator="-";
textOne.setText(""+numberOne);
textTwo.setText(""+numberTwo);
operatorLabel.setText(operator);
message.setText("请回答");
textResult.setText(null);
}
elseif(str.equals("answer")){
Stringanswer=textResult.getText();
try{intresult=Integer.parseInt(answer);
if(operator.equals("+")){
if(result==numberOne+numberTwo)
message.setText("你回答正确");
else
message.setText("你回答错误");
}
elseif(operator.equals("-")){
if(result==numberOne-numberTwo)
message.setText("你回答正确");
else
message.setText("你回答错误");
}
}
catch(NumberFormatExceptionex){
message.setText("请输入数字字符");
}
}
}
publicvoidsetJTextField(JTextField...t){
textOne=t[0];
textTwo=t[1];
textResult=t[2];
}
publicvoidsetJLabel(JLabel...label){
operatorLabel=label[0];
message=label[1];
}
}
3.实验指导
Jbutton对象可触发ActionEvent事件。
为了能监视到此类事件,事件源必须使用addActionListener方法获得监视器,创建监视器的类必须实现接口ActionListener。
4.实验扩展
(1)模仿本实验代码,再增加“小学生”级别。
(2)给出上述程序增加测试乘法的功能。
实验2布局与日历
1.实验要求
编写一个应用程序,有一个窗口,该窗口的布局为BorderLayout布局。
窗口的中心添加一个JPanel容器pCenter,pCenter的布局是7行7列的GriderLayout布局,pCenter中放置49个标签,用来显示日历。
窗口的北面添加一个JPanel容器pNorth,其布局是FlowLayout布局,pNorth放置两个按钮:
nextMonth和previousMonth。
单击nextMonth按钮,可以显示当前月的下一月的日历;单击previousMonth按钮,可以显示当前月的上一月的日历;窗口的南面添加一个Jpanel容器pSouth,其布局是FlowLayout布局,pSouth中放置一个标签用来显示一些信息。
2.程序模板
CalendarMainClass.java
publicclassCalendarMainClass{
publicstaticvoidmain(Stringargs[]){
CalendarFrameframe=newCalendarFrame();
frame.setBounds(100,100,360,300);
frame.setVisible(true);
frame.setYearAndMonth(2015,5);
}
}
CalendarBean.java
importjava.util.Calendar;
publicclassCalendarBean{
Stringday[];
intyear=2005,month=0;
publicvoidsetYear(intyear){
this.year=year;
}
publicintgetYear(){
returnyear;
}
publicvoidsetMonth(intmonth){
this.month=month;
}
publicintgetMonth(){
returnmonth;
}
publicString[]getCalendar(){
Stringa[]=newString[42];
Calendar日历=Calendar.getInstance();
日历.set(year,month-1,1);
int星期几=日历.get(Calendar.DAY_OF_WEEK)-1;
intday=0;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
day=31;
if(month==4||month==6||month==9||month==11)
day=30;
if(month==2){
if(((year%4==0)&&(year%100!
=0))||(year%400==0))
day=29;
else
day=28;
}
for(inti=星期几,n=1;i<星期几+day;i++){
a[i]=String.valueOf(n);
n++;
}
returna;
}
}
CalendarFrame.java
importjava.util.*;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.border.*;
publicclassCalendarFrameextendsJFrameimplementsActionListener{
JLabellabelDay[]=newJLabel[42];
JButtontitleName[]=newJButton[7];
Stringname[]={"日","一","二","三","四","五","六"};
JButtonnextMonth,previousMonth;
CalendarBeancalendar;
JLabelshowMessage=newJLabel("",JLabel.CENTER);
intyear=2011,month=2;
publicCalendarFrame(){
JPanelpCenter=newJPanel();
【代码1】//将pCenter的布局设置为7行7列的GridLayout布局。
for(inti=0;i<7;i++){
titleName[i]=newJButton(name[i]);
titleName[i].setBorder(newSoftBevelBorder(BevelBorder.RAISED));
pCenter.add(titleName[i]);
}
for(inti=0;i<42;i++){
labelDay[i]=newJLabel("",JLabel.CENTER);
labelDay[i].setBorder(newSoftBevelBorder(BevelBorder.LOWERED));
【代码2】//pCenter添加组件labelDay[i]。
}
calendar=newCalendarBean();
nextMonth=newJButton("下月");
previousMonth=newJButton("上月");
nextMonth.addActionListener(this);
previousMonth.addActionListener(this);
JPanelpNorth=newJPanel(),
pSouth=newJPanel();
pNorth.add(previousMonth);
pNorth.add(nextMonth);
pSouth.add(showMessage);
add(pCenter,BorderLayout.CENTER);
【代码3】//窗口添加pNorth在北面区域
【代码4】//窗口添加pSouth在南区域。
setYearAndMonth(year,month);
setDefaultCloseOperation(DISPOSE_ON_CLOSE);
}
publicvoidsetYearAndMonth(inty,intm){
calendar.setYear(y);
calendar.setMonth(m);
Stringday[]=calendar.getCalendar();
for(inti=0;i<42;i++)
labelDay[i].setText(day[i]);
showMessage.setText("日历:
"+calendar.getYear()+"年"+calendar.getMonth()+"月");
}
publicvoidactionPerformed(ActionEvente){
if(e.getSource()==nextMonth){
month=month+1;
if(month>12)
month=1;
calendar.setMonth(month);
Stringday[]=calendar.getCalendar();
for(inti=0;i<42;i++){
labelDay[i].setText(day[i]);
}
}
elseif(e.getSource()==previousMonth){
month=month-1;
if(month<1)
month=12;
calendar.setMonth(month);
Stringday[]=calendar.getCalendar();
for(inti=0;i<42;i++)
labelDay[i].setText(day[i]);
}
showMessage.setText("日历:
"+calendar.getYear()+"年"+calendar.getMonth()+"月");
}
}
3.实验扩展
在CalendarFrame类中增加一个JTextField文本框,用户可以通过在文本框中输入年份来修改calendar对象的int成员year
实验3英语单词拼写训练
1.实验要求
编写一个应用程序,要求如下:
●窗口有一个TextField对象和一个按钮对象,将这两个对象添加到一个面板中,然后将该面板添加到窗口的上面。
●用户在TextField对象中输入一个英文单词,然后按Enter或单击“确定”按钮,程序将创建若干个不可编辑的文本框,每个文本框随机显示英文单词中的一个字母。
要求将这些文本框按一行添加到一个面板中,然后将该面板添加到窗口的中心。
●用户用鼠标单击一个文本框后,通过按下键盘上的“←”和“→”键交换相邻文本框中的字母,使得这些文本框中的字母的排列顺序和英文单词中字母的顺序相同。
2.程序模板
WordMainClass.java
publicclassWordMainClass{
publicstaticvoidmain(Stringargs[]){
newSpellingWordFrame();
}
}
-------------------------------------------------------------------------------------------------
RondomString.java
publicclassRondomString{//负责随机排列单词中的字母
Stringstr="";
publicStringgetRondomString(Strings){
StringBufferstrBuffer=newStringBuffer(s);
intm=strBuffer.length();
for(intk=0;kintindex=(int)(Math.random()*strBuffer.length());//Math.random()返回(0,1)之间的随机数
charc=strBuffer.charAt(index);
str=str+c;
strBuffer=strBuffer.deleteCharAt(index);
}
returnstr;
}
}
----------------------------------------------------------------------------------------------------------------
LetterLabel.java
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassLetterLabelextendsJTextFieldimplementsFocusListener{
LetterLabel(){
setEditable(false);
addFocusListener(this);//【代码1】//将当前对象注册为自身的焦点视器
setBackground(Color.white);
setFont(newFont("Arial",Font.PLAIN,30));
}
publicstaticLetterLabel[]getLetterLabel(intn){
LetterLabela[]=newLetterLabel[n];
for(intk=0;ka[k]=newLetterLabel();
returna;
}
publicvoidfocusGained(FocusEvente){
setBackground(Color.cyan);
}
publicvoidfocusLost(FocusEvente){
setBackground(Color.white);
}
publicvoidsetText(charc){
setText(""+c);
}
}
-------------