华容道Java提高型实验报告.docx
- 文档编号:8423294
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:10
- 大小:36.17KB
华容道Java提高型实验报告.docx
《华容道Java提高型实验报告.docx》由会员分享,可在线阅读,更多相关《华容道Java提高型实验报告.docx(10页珍藏版)》请在冰豆网上搜索。
华容道Java提高型实验报告
XX学校
提高型实验报告
实验课题
JAVA综合程序设计(提高型)
(实验类型:
□综合性■设计性□应用性)
实验课程
面向对象程序设计
实验时间
学生姓名:
专业班级:
学号:
成绩:
教师签名:
日期:
一.实验目的和要求
1、深入了解图形用户界面基本组件窗口、按钮、文本框、选择框、滚动条等的使用方法,了解如何使用布局管理器对组件进行管理,以及如何使用Java的事件处理机制。
2、将所学知识进行综合运用,模仿设计具有实际意义的应用程序。
3、锻炼使用新类(没有介绍的)类的能力。
二.实验条件
硬件:
计算机一台
软件:
EditPlus、JDK1.6
三.实验原理分析
编写一个华容道传统的智利游戏,练习使用布局管理器设计一个华容道游戏界面,并练习使用事件监听器(鼠标事件、键盘事件和焦点事件)实现按钮的移动。
首先是界面设计,该界面主要包括十个人物按钮(马、曹操、关羽等)以及旁边的四个边框按钮和重新开始按钮。
对于人物按钮,我们可以创建Button按钮的子类,在该类中定义按钮的一些新的属性和焦点事件监听器,如按钮的标签名、按钮的颜色、按钮获得或失去焦点事件。
同时在设计该界面时要考虑到各个按钮的位置、大小等情况。
其次,是对界面上的各人物按钮添加相应的相应事件(鼠标事件、键盘事件),通过这两种事件去完成界面上各人物按钮的移动。
对重新开始按钮定义动作事件(ActionEvent)完成界面初始化功能(也就是各人物按钮重新归位)。
四.实验方案或步骤
程序代码:
importjava.awt.*;
importjava.applet.*;
importjava.awt.event.*;
importjavax.swing.*;
publicclassHuaRongRoad{
publicstaticvoidmain(Stringargs[]){
newHua_Rong_Road();
}
}
classPersonextendsJButtonimplementsFocusListener{
intnumber;
Colorc;
Person(intnumber,Strings){
super(s);
this.number=number;
c=getBackground();
setFont(newFont("宋体",Font.CENTER_BASELINE,14));
addFocusListener(this);//当前按钮注册为本身的监视器
}
publicvoidfocusGained(FocusEvente){
setBackground(Color.cyan);
}
publicvoidfocusLost(FocusEvente){
setBackground(c);
}
}
classHua_Rong_RoadextendsJFrameimplementsKeyListener,MouseListener,ActionListener{
Personperson[]=newPerson[10];
JButtonleft,right,above,below;
JButtonrestart=newJButton("重新开始");
Containercon;
publicHua_Rong_Road(){
init();
setBounds(100,100,320,360);
setVisible(true);
validate();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
publicvoidinit(){
con=getContentPane();
con.setLayout(null);
con.add(restart);
restart.setBounds(100,5,120,25);
restart.addActionListener(this);
Stringname[]={"曹操","关羽","张","刘","马","许","兵","兵","兵","兵"};
for(inti=0;i person[i]=newPerson(i,name[i]); person[i].addKeyListener(this);//将当前窗口注册为person[i]的KeyEvent事件监视器 person[i].addMouseListener(this);//将当前窗口注册为person[i]的MouseEvent事件监视器 con.add(person[i]); } person[0].setBounds(104,54,100,100); person[1].setBounds(104,154,100,50); person[2].setBounds(54,154,50,100); person[3].setBounds(204,154,50,100); person[4].setBounds(54,54,50,100); person[5].setBounds(204,54,50,100); person[6].setBounds(54,254,50,50); person[7].setBounds(204,254,50,50); person[8].setBounds(104,204,50,50); person[9].setBounds(154,204,50,50); person[9].requestFocus();//person[9]获取焦点 left=newJButton(); right=newJButton(); above=newJButton(); below=newJButton(); con.add(left); con.add(right); con.add(above); con.add(below); left.setBounds(49,49,5,260); right.setBounds(254,49,5,260); above.setBounds(49,49,210,5); below.setBounds(49,304,210,5); con.validate(); } publicvoidkeyPressed(KeyEvente){ Personman=(Person)e.getSource();//返回事件源 if(e.getKeyCode()==KeyEvent.VK_DOWN){//判断是否按了“↓”键 goDown(man); } if(e.getKeyCode()==KeyEvent.VK_UP){//判断是否按了“↑”键 goUp(man); } if(e.getKeyCode()==KeyEvent.VK_LEFT){//判断是否按了“←”键 goLeft(man); } if(e.getKeyCode()==KeyEvent.VK_RIGHT){//判断是否按了“→”键 goRight(man); } } publicvoidkeyTyped(KeyEvente){} publicvoidkeyReleased(KeyEvente){} publicvoidmousePressed(MouseEvente){ Personman=(Person)e.getSource();//返回事件源 intx=1,y=1; x=e.getX(); y=e.getY(); intw=man.getBounds().width; inth=man.getBounds().height; if(y>h/2) goDown(man); if(y goUp(man); if(x goLeft(man); if(x>w/2) goRight(man); } publicvoidmouseReleased(MouseEvente){} publicvoidmouseEntered(MouseEvente){} publicvoidmouseExited(MouseEvente){} publicvoidmouseClicked(MouseEvente){} publicvoidgoDown(Personman){ booleanmove=true; RectanglemanRect=man.getBounds(); intx=man.getBounds().x; inty=man.getBounds().y; y=y+50; manRect.setLocation(x,y); RectanglebelowRect=below.getBounds(); for(inti=0;i<10;i++){ RectanglepersonRect=person[i].getBounds(); if((manRect.intersects(personRect))&&(man.number! =i)) move=false; } if(manRect.intersects(belowRect)) move=false; if(move==true) man.setLocation(x,y); } publicvoidgoUp(Personman){ booleanmove=true; RectanglemanRect=man.getBounds(); intx=man.getBounds().x; inty=man.getBounds().y; y=50; manRect.setLocation(x,y); RectangleaboveRect=above.getBounds(); for(inti=0;i<10;i++){ RectanglepersonRect=person[i].getBounds(); if((manRect.intersects(personRect))&&(man.number! =i)) move=false; } if(manRect.intersects(aboveRect)) move=false; if(move==true) man.setLocation(x,y); } publicvoidgoLeft(Personman){ booleanmove=true; RectanglemanRect=man.getBounds(); intx=man.getBounds().x; inty=man.getBounds().y; x=x-50; manRect.setLocation(x,y); RectangleleftRect=left.getBounds(); for(inti=0;i<10;i++){ RectanglepersonRect=person[i].getBounds(); if((manRect.intersects(personRect))&&(man.number! =i)) move=false; } if(manRect.intersects(leftRect)) move=false; if(move==true) man.setLocation(x,y); } publicvoidgoRight(Personman){ booleanmove=true; RectanglemanRect=man.getBounds(); intx=man.getBounds().x; inty=man.getBounds().y; x=x+50; manRect.setLocation(x,y); RectanglerightRect=right.getBounds(); for(inti=0;i<10;i++){ RectanglepersonRect=person[i].getBounds(); if((manRect.intersects(personRect))&&(man.number! =i)) move=false; } if(manRect.intersects(rightRect)) move=false; if(move==true) man.setLocation(x,y); } publicvoidactionPerformed(ActionEvente){ con.removeAll(); init(); validate(); repaint(); } } 五.实验结果与分析 组件可以触发焦点事件。 组件可以用addFocusListener(FocusListenerlistener)方法增加焦点事件监视器。 当组件具有焦点监视器后,如果组件从无输入焦点变成有输入焦点或从有输入焦点变成无输入焦点都会触发FocusEvent事件。 创建监视器的类必须实现FocusListener接口,该接口有如下两个方法: PublicvoidfocusGained(FocusEvente) PublicvoidfocusLost(FocusEvente) 当从无输入焦点变成有输入焦点触发FocusEvent事件时,监视器调用类实现的接口方法focusGained(FocusEvente);当从有输入焦点变成无输入焦点触发FocusEvent事件时,监视器调用类实现的接口方法focusLost(FocusEvente)。 六.讨论 经过一段时间的不断努力,我终于编成了华容道这个传统的中国小游戏,我体会到学习Java不能闭门造车,必须从多个方面进行不断学习,从各个方面解决问题才能完成好对程序的编写。 做这个程序,有利于培养我们掌握程序设计的基本思路和方法,加强我们研发、调试程序的能力,提高我们分析、解决问题的能力。 同时,我们在学习Java语言来设计程序过程中,最基本的要做到两点,一是标识符命名遵循Java命名规范,二是能够考虑各种异常处理,注重提高程序运行效率。 此外,该程序对我们要求还有很多,比如说在我们编程过程当中,我们使用图形界面实现时,要符合日常软件使用规范来设计菜单和界面,要根据课程设计要求把各种功能转换成相应组件的响应事件,还要在实现程序功能前先完成图形界面设计,等等。 总之,我从中学到实际开发中的许多经验和技巧,对程序的编程思想有了一定的提高。 我将继续努力,让自己在编程方面的实际操作能力不断提升。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华容道 Java 提高 实验 报告