组件与事件编程Java实验报告三.docx
《组件与事件编程Java实验报告三.docx》由会员分享,可在线阅读,更多相关《组件与事件编程Java实验报告三.docx(35页珍藏版)》请在冰豆网上搜索。
![组件与事件编程Java实验报告三.docx](https://file1.bdocx.com/fileroot1/2023-1/7/e9600b3d-e2d5-496c-9d94-2d2aa1553ca9/e9600b3d-e2d5-496c-9d94-2d2aa1553ca91.gif)
组件与事件编程Java实验报告三
甘肃政法学院
本科学生实验报告
(三)
姓名贾燚学院计算机科学学院
专业信息管理与信息系统
实验课程名称Java实用教程
试验时间2011年10月4日
指导教师及职称李瑞生
实验成绩
开课时间2011学年第2学期
甘肃政法学院实验管理中心印制
实验题目
组件与事件编程
小组合作
是○否☉
姓名
贾燚
班级
10级信管班
学号
201081020108
一、实验目的:
1、掌握java图形用户界面设计常用类及其各自重要方法的应用。
2、掌握java事件处理模式并熟练掌握文本框上事件处理的方法。
3、进一步掌握javaAWT组件、Swing组件及事件编程的各种方法。
4、掌握对话框的编制和事件处理方法。
5、掌握鼠标焦点事件、鼠标事件及键盘事件的处理方法。
二、实验环境:
装有Myeclipse8.5的计算机一台
三、实验内容与步骤:
1、算术测试
1)进入Myeclipse8.5界面,依次选择File—>New—>JavaProject命令,打开新建项目向导,在“Projectname”栏中输入项目名“Jy001”,单击“Finish”按钮
2)右击项目“Jy001”,选择“New—>Package”,在“Name”栏中输入包名“org.circle”,单击“Finish”按钮完成包的创建
3)右击项目“Jy001”的包“org.circle”,选择“New—>Class”,在“Name”栏中输入类名“Teacher”,单击“Finish”按钮完成类的创建
4)双击“Teacher.java”,编辑以下代码:
publicclassTeacher
{intnumberOne,numberTwo;
Stringoperator="";
booleanright;
publicintgiveNumberOne(intn)
{numberOne=(int)(Math.random()*n)+1;
returnnumberOne;
}
publicintgiveNumberTwo(intn)
{numberTwo=(int)(Math.random()*n)+1;
returnnumberTwo;
}
publicStringgiveOperator()
{doubled=Math.random();
if(d>=0.5)
operator="+";
else
operator="-";
returnoperator;
}
publicbooleangetRight(intanswer)
{if(operator.equals("+"))
{if(answer==numberOne+numberTwo)
right=true;
else
right=false;
}
elseif(operator.equals("-"))
{if(answer==numberOne-numberTwo)
right=true;
else
right=false;
}
returnright;
}
}
5)右击项目“Jy001”的包“org.circle”,选择“New—>Class”,在“Name”栏中输入类名“ComputerFrame”,单击“Finish”按钮完成类的创建
6)双击“ComputerFrame.java”,编辑以下代码:
importjava.awt.*;
importjava.awt.event.*;
publicclassComputerFrameextendsFrameimplementsActionListener
{TextFieldtextOne,textTwo,textResult;
ButtongetProblem,giveAnwser;
LabeloperatorLabel,message;
Teacherteacher;
ComputerFrame(Strings)
{super(s);
teacher=newTeacher();
setLayout(newFlowLayout());
textOne=newTextField(10);//创建textOne,其可见字符长是10
textTwo=newTextField(10);//创建textTwo,其可见字符长是10
textResult=newTextField(10);//创建textResult,其可见字符长是10
operatorLabel=newLabel("+");
message=newLabel("你还没有回答呢");
getProblem=newButton("获取题目");
giveAnwser=newButton("确认答案");
add(getProblem);
add(textOne);
add(operatorLabel);
add(textTwo);
add(newLabel("="));
add(textResult);
add(giveAnwser);
add(message);
textResult.requestFocus();
textOne.setEditable(false);
textTwo.setEditable(false);
getProblem.addActionListener(this);//将当前窗口注册为getProblem的ActionEvent事件监视器
giveAnwser.addActionListener(this);//将当前窗口注册为giveAnwser的ActionEvent事件监视器
textResult.addActionListener(this);//将当前窗口注册为textResult的ActionEvent事件监视器
setBounds(100,100,450,100);
setVisible(true);
validate();
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}
}
);
}
publicvoidactionPerformed(ActionEvente)
{if(e.getSource()==getProblem)//判断事件源是否是getProblem
{intnumber1=teacher.giveNumberOne(100);
intnumber2=teacher.giveNumberTwo(100);
Stringoperator=teacher.givetOperator();
textOne.setText(""+number1);
textTwo.setText(""+number2);
operatorLabel.setText(operator);
message.setText("请回答");
textResult.setText(null);
}
if(e.getSource()==giveAnwser)//判断事件源是否是giveAnwser
{Stringanswer=textResult.getText();
try{
intresult=Integer.parseInt(answer);
if(teacher.getRight(result)==true)
{message.setText("你回答正确");
}
else
{message.setText("你回答错误");
}
}
catch(NumberFormatExceptionex)
{message.setText("请输入数字字符");
}
}
textResult.requestFocus();
validate();
}
}
7)右击项目“Jy001”的包“org.circle”,选择“New—>Class”,在“Name”栏中输入类名“MainClass”,单击“Finish”按钮完成类的创建
8)双击“MainClass.java”,编辑以下代码:
publicclassMainClass
{publicstaticvoidmain(Stringargs[])
{ComputerFrameframe;
frame=newComputerFrame("算术运算");//创建窗口,其标题为:
算术测试
}
}
9)右击“MainClass.java”,选择Runas—>JavaApplication命令,运行Java程序,其结果如图1所示:
图1
2、信号灯
1)进入Myeclipse8.5界面,依次选择File—>New—>JavaProject命令,打开新建项目向导,在“Projectname”栏中输入项目名“Jy001”,单击“Finish”按钮
2)右击项目“Jy001”,选择“New—>Package”,在“Name”栏中输入包名“org.circle”,单击“Finish”按钮完成包的创建
3)右击项目“Jy001”的包“org.circle”,选择“New—>Class”,在“Name”栏中输入类名“SignalMainClass”,单击“Finish”按钮完成类的创建
4)双击“SignalMainClass.java”,编辑以下代码:
importjava.awt.*;
importjava.applet.*;
importjava.awt.event.*;
classSignalCanvasextendsCanvas
{intred,green,yellow,x,y,r;
SignalCanvas()
{setBackground(Color.white);
}
publicvoidsetRed(intr)
{red=r;
}
publicvoidsetGreen(intg)
{green=g;
}
publicvoidsetYellow(inty)
{yellow=y;
}
publicvoidsetPosition(intx,inty)
{this.x=x;
this.y=y;
}
publicvoidsetRadius(intr)
{this.r=r;
}
publicvoidpaint(Graphicsg)
{if(red==1)
{g.setColor(Color.red);
}
elseif(green==1)
{g.setColor(Color.green);
}
elseif(yellow==1)
{g.setColor(Color.yellow);
}
g.fillOval(x,y,2*r,2*r);
}
}
classSignalFrameextendsFrameimplementsItemListener
{Choicechoice;
SignalCanvassignal=null;
StringitemRed="红灯",itemYellow="黄灯",itemGreen="绿灯";
publicSignalFrame()
{choice=choice=newChoice();//创建choice
choice.add(itemRed);//创建choice添加itemRed
choice.add(itemYellow);//创建choice添加itemYellow
choice.add(itemGreen);//创建choice添加itemGreen
choice.addItemListener(this);//将当前窗口注册为choice的ItemEvent事件监视器
add(choice,BorderLayout.NORTH);
try{Classcs=Class.forName("SignalCanvas");
signal=(SignalCanvas)cs.newInstance();
add(signal,BorderLayout.CENTER);
}
catch(Exceptione)
{add(newLabel("您还没有编写SignalCanvas类"),BorderLayout.CENTER);
}
setBounds(100,100,360,300);
setVisible(true);
validate();
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}
}
);
}
publicvoiditemStateChanged(ItemEvente)
{Stringitem=choice.getSelectedItem();//choice返回被选中的条目
intw=signal.getBounds().width;
inth=signal.getBounds().height;
intm=Math.min(w,h);
signal.setRadius(m/6);
if(item.equals(itemRed))
{if(signal!
=null)
{signal.setRed
(1);
signal.setYellow(0);
signal.setGreen(0);
signal.setPosition(w/3,0);
signal.repaint();
}
}
elseif(item.equals(itemYellow))
{if(signal!
=null)
{signal.setRed(0);
signal.setYellow
(1);
signal.setGreen(0);
signal.setPosition(w/3,h/3);
signal.repaint();
}
}
elseif(item.equals(itemGreen))
{if(signal!
=null)
{signal.setRed(0);
signal.setYellow(0);
signal.setGreen
(1);
signal.setPosition(w/3,2*h/3);
signal.repaint();
}
}
}
}
publicclassSignalMainClass
{publicstaticvoidmain(Stringargs[])
{SignalFrameframe;
frame=newSignalFrame();
frame.setTitle("信号灯");
}
}
5)右击“SignalMainClass.java”,选择Runas—>JavaApplication命令,运行Java程序,其结果如图2所示:
图2
3、布局与日历
1)进入Myeclipse8.5界面,依次选择File—>New—>JavaProject命令,打开新建项目向导,在“Projectname”栏中输入项目名“Jy001”,单击“Finish”按钮
2)右击项目“Jy001”,选择“New—>Package”,在“Name”栏中输入包名“org.circle”,单击“Finish”按钮完成包的创建
3)右击项目“Jy001”的包“org.circle”,选择“New—>Class”,在“Name”栏中输入类名“CalendarBean”,单击“Finish”按钮完成类的创建
4)双击“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;
}
}
5)右击项目“Jy001”,选择“New—>Class”,在“Name”栏中输入类名“CalendarFrame”,单击“Finish”按钮完成类的创建
6)双击“CalendarFrame.java”,编辑以下代码:
importjava.util.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.applet.*;
publicclassCalendarFrameextendsFrameimplementsActionListener
{LabellabelDay[]=newLabel[42];
ButtontitleName[]=newButton[7];
Stringname[]={"日","一","二","三","四","五","六"};
ButtonnextMonth,previousMonth;
intyear=2006,month=10;
CalendarBeancalendar;
LabelshowMessage=newLabel("",Label.CENTER);
publicCalendarFrame()
{PanelpCenter=newPanel();
pCenter.setLayout(newGridLayout(7,7));
//将pCenter的布局设置为7行7列的GridLayout布局。
for(inti=0;i<7;i++)
{titleName[i]=newButton(name[i]);
pCenter.add(titleName[i]);//pCenter添加组件titleName[i]。
}
for(inti=0;i<42;i++)
{
labelDay[i]=newLabel("",Label.CENTER);
pCenter.add(labelDay[i]);//pCenter添加组件labelDay[i]。
}
calendar=newCalendarBean();
calendar.setYear(year);
calendar.setMonth(month);
Stringday[]=calendar.getCalendar();
for(inti=0;i<42;i++)
{labelDay[i].setText(day[i]);
}
nextMonth=newButton("下月");
previousMonth=newButton("上月");
nextMonth.addActionListener(this);
previousMonth.addActionListener(this);
PanelpNorth=newPanel(),
pSouth=newPanel();
pNorth.add(previousMonth);
pNorth.add(nextMonth);
pSouth.add(showMessage);
showMessage.setText("日历:
"+calendar.getYear()+"年"+calendar.getMonth()+"月");
ScrollPanescrollPane=newScrollPane();
scrollPane.add(pCenter);
add(scrollPane,BorderLayout.CENTER);//窗口添加scrollPane在中心区域
add(pNorth,BorderLayout.NORTH);//窗口添加pNorth在北面区域
add(pSouth,BorderLayout.SOUTH);//窗口添加pSouth在南区域。
}
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()==prev