Java实验项目三组件与事件编程第1部分.docx
《Java实验项目三组件与事件编程第1部分.docx》由会员分享,可在线阅读,更多相关《Java实验项目三组件与事件编程第1部分.docx(16页珍藏版)》请在冰豆网上搜索。
Java实验项目三组件与事件编程第1部分
Java实验项目三组件与事件编程
第1部分组件与事件处理
[实验目的]
1、掌握java图形用户界面设计常用类及其各自重要方法的应用。
2、掌握java事件处理模式并熟练掌握文本框上事件处理的方法。
[实验要求]
1、复习理论教学中所学的内容。
2、认真进行实验预习,查阅参考书,书写源程序,书写实验预习报告。
3、认真总结实验并书写实验报告。
[实验课时]2学时
[实验教学方式]学生上机实验,教师随堂指导。
[实验内容]
1、算术测试:
请读懂下面模板程序,将其补充完整并调试运行。
importjava.awt.*;
importjava.awt.event.*;
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;
}
}
publicclassComputerFrameextendsFrameimplementsActionListener
{TextFieldtextOne,textTwo,textResult;
ButtongetProblem,giveAnwser;
LabeloperatorLabel,message;
Teacherteacher;
ComputerFrame(Strings)
{super(s);
teacher=newTeacher();
setLayout(newFlowLayout());
textOne=【代码1】//创建textOne,其可见字符长是10
textTwo=【代码2】//创建textTwo,其可见字符长是10
textResult=【代码3】//创建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);
【代码4】//将当前窗口注册为getProblem的ActionEvent事件监视器
【代码5】//将当前窗口注册为giveAnwser的ActionEvent事件监视器
【代码6】//将当前窗口注册为textResult的ActionEvent事件监视器
setBounds(100,100,450,100);
setVisible(true);
validate();
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvente)
{System.exit(0);
}
}
);
}
publicvoidactionPerformed(ActionEvente)
{if(【代码7】)//判断事件源是否是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(【代码8】)//判断事件源是否是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();
}
}
publicclassMainClass
{publicstaticvoidmain(Stringargs[])
{ComputerFrameframe;
frame=【代码9】//创建窗口,其标题为:
算术测试
}
}
2、信号灯:
请读懂下面模板程序,将其补充完整并调试运行。
importjava.awt.*;
importjava.applet.*;
importjava.awt.event.*;
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);
}
}
publicclassSignalFrameextendsFrameimplementsItemListener
{Choicechoice;
SignalCanvassignal=null;
StringitemRed="红灯",itemYellow="黄灯",itemGreen="绿灯";
publicSignalFrame()
{choice=【代码1】//创建choice
【代码2】//创建choice添加itemRed
【代码3】//创建choice添加itemYellow
【代码4】//创建choice添加itemGreen
【代码5】//将当前窗口注册为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=【代码6】//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("信号灯");
}
}
3、布局与日历:
请读懂下面模板程序,将其补充完整并调试运行。
importjava.util.*;
importjava.awt.*;
importjava.awt.event.*;
importjava.applet.*;
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;
}
}
publicclassCalendarFrameextendsFrameimplementsActionListener
{LabellabelDay[]=newLabel[42];
ButtontitleName[]=newButton[7];
Stringname[]={"日","一","二","三","四","五","六"};
ButtonnextMonth,previousMonth;
intyear=2006,month=10;
CalendarBeancalendar;
LabelshowMessage=newLabel("",Label.CENTER);
publicCalendarFrame()
{PanelpCenter=newPanel();
【代码1】//将pCenter的布局设置为7行7列的GridLayout布局。
for(inti=0;i<7;i++)
{titleName[i]=newButton(name[i]);
【代码2】//pCenter添加组件titleName[i]。
}
for(inti=0;i<42;i++)
{
labelDay[i]=newLabel("",Label.CENTER);
【代码3】//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);
【代码4】//窗口添加scrollPane在中心区域
【代码5】//窗口添加pNorth在北面区域
【代码6】//窗口添加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()+"月");
}
}
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);
}
}
);
}
}
[参考程序]
1.textOne=newTextField(10);//创建textOne,其可见字符长是10
textTwo=newTextField(10);//创建textTwo,其可见字符长是10
textResult=newTextField(10);//创建textResult,其可见字符长是10
getProblem.addActionListener(this);//将当前窗口注册为getProblem的ActionEvent事件监视器
giveAnwser.addActionListener(this);//将当前窗口注册为giveAnwser的ActionEvent事件监视器
textResult.addActionListener(this);//将当前窗口注册为textResult的ActionEvent事件监视器
if(e.getSource()==getProblem)//判断事件源是否是getProblem
if(e.getSource()==giveAnwser)//判断事件源是否是giveAnwser
frame=newComputerFrame("算术运算");//创建窗口,其标题为:
算术测试
2.choice=newChoice();//创建choice
choice.add(itemRed);//创建choice添加itemRed
choice.add(itemYellow);//创建choice添加itemYellow
choice.add(itemGreen);//创建choice添加itemGreen
choice.addItemListener(this);//将当前窗口注册为choice的ItemEvent事件监视器
Stringitem=choice.getSelectedItem();//choice返回被选中的条目
3、【代码1】:
pCenter.setLayout(newGridLayout(7,7));
【代码2】:
pCenter.add(titleName[i]);
【代码3】:
pCenter.add(labelDay[i]);
【代码4】:
add(scrollPane,BorderLayout.CENTER);
【代码5】:
add(pNorth,BorderLayout.NORTH);
【代码6】:
add(pSouth,BorderLayout.SOUTH);