组件与事件处理及编程.docx
《组件与事件处理及编程.docx》由会员分享,可在线阅读,更多相关《组件与事件处理及编程.docx(36页珍藏版)》请在冰豆网上搜索。
![组件与事件处理及编程.docx](https://file1.bdocx.com/fileroot1/2023-5/15/f886c4c7-2580-4827-9ae6-6728e88f47bf/f886c4c7-2580-4827-9ae6-6728e88f47bf1.gif)
组件与事件处理及编程
甘肃政法学院
本科学生实验报告
(三)
姓名刘倚帆学院计算机科学学院
专业计算机科学与技术班级12级专升本班
实验课程名称Java程序设计
试验时间2012年10月23日
指导教师及职称李瑞生
实验成绩
开课时间2012—2013学年第一学期
甘肃政法学院实验管理中心印制
实验题目
组件与事件处理
(1)
组件与事件编程
(2)
小组合作
否
姓名
班级
学号
一、实验目的:
组件与事件处理
(1)
掌握java图形用户界面设计常用类及其各自重要方法的应用。
掌握java事件处理模式并熟练掌握文本框上事件处理的方法。
组件与事件编程
(2)
掌握package语句与import语句的用法。
掌握对话框的编制和事件处理方法。
掌握鼠标焦点事件、鼠标事件及键盘事件的处理方法。
二、实验要求:
∙复习理论教学中所学的内容。
∙认真进行实验预习,查阅参考书,书写源程序,书写实验预习报告。
∙认真总结实验并书写实验报告。
三、实验环境:
安装有JDK1.6,Eclipse的计算机。
四、实验内容与步骤:
组件与事件处理
(1)
1、算术测试:
请读懂下面模板程序,将其补充完整并调试运行。
Teacher.java
package实验3_1_1;
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;
}
}
ComputerFrame.java
package实验3_1_1;
importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.JTextField;
@SuppressWarnings("serial")
publicclassComputerFrameextendsFrameimplementsActionListener
{JTextFieldtextOne;
JTextFieldtextTwo;
JTextFieldtextResult;
ButtongetProblem,giveAnwser;
LabeloperatorLabel,message;
Teacherteacher;
ComputerFrame(Strings)
{super(s);
teacher=newTeacher();
setLayout(newFlowLayout());
textOne=newJTextField(10);//创建textOne,其可见字符长是10
textTwo=newJTextField(10);//创建textTwo,其可见字符长是10
textResult=newJTextField(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.giveOperator();
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();
}
}
MainClass.java
package实验3_1_1;
publicclassMainClass
{@SuppressWarnings("unused")
publicstaticvoidmain(Stringargs[])
{ComputerFrameframe;
frame=newComputerFrame("算术测试");//创建窗口,其标题为:
算术测试
}
}
运行结果:
2、信号灯:
请读懂下面模板程序,将其补充完整并调试运行。
SignalCanvas.java
package实验3_1_2;
importjava.awt.*;
@SuppressWarnings("serial")
publicclassSignalCanvasextendsCanvas
{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);
}
}
SignalFrame.java
package实验3_1_2;
importjava.awt.*;
importjava.applet.*;
importjava.awt.event.*;
@SuppressWarnings({"serial","unused"})
publicclassSignalFrameextendsFrameimplementsItemListener
{Choicechoice;
SignalCanvassignal=null;
StringitemRed="红灯",itemYellow="黄灯",itemGreen="绿灯";
@SuppressWarnings("rawtypes")
publicSignalFrame()
{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();
}
}
}
}
SignalMainClass.java
package实验3_1_2;
publicclassSignalMainClass
{publicstaticvoidmain(Stringargs[])
{SignalFrameframe;
frame=newSignalFrame();
frame.setTitle("信号灯");
}
}
运行结果:
3、布局与日历:
请读懂下面模板程序,将其补充完整并调试运行。
CalendarBean.java
package实验3_1_3;
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
package实验3_1_3;
importjava.util.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.applet.*;
@SuppressWarnings({"serial","unused"})
publicclassCalendarFrameextendsFrameimplementsActionListener
{LabellabelDay[]=newLabel[42];
ButtontitleName[]=newButton[7];
Stringname[]={"日","一","二","三","四","五","六"};
ButtonnextMonth,previousMonth;
intyear=2012,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(scrollPane,BorderLayout.CENTER);//窗口添加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()==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()+"月");
}
}
CalendarMainClass.java
package实验3_1_3;
publicclassCalendarMainClass
{publicstaticvoidmain(Stringargs[])
{CalendarFrameframe=newCalendarFrame();
frame.setBounds(100,100,360,300);
frame.setVisible(true);
frame.validate();
frame.addWindowListener(newjava.awt.event.WindowAdapter()
{publicvoidwindowClosing(java.awt.event.WindowEvente)
{System.exit(0);
}