




已阅读5页,还剩3页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Java编程实例模拟钢琴本例知识点一句话讲解新学知识使用AudioClip类播放声音使用MouseEvent类处理鼠标事件已学知识使用Image类制作图片使用Frame类制作界面框架一、练习具体要求本练习制作模拟钢琴的实例。如图98-1所示,程序执行后,创建一个带有模拟钢琴键盘的面板,用户可以通过键盘或者鼠标来“敲击”钢琴键盘发出声音,也可以通过电脑键盘的组合键实现钢琴的高音。二、程序及注释(1)编程思路:首先,本练习因为要制作模拟钢琴的实例,所以首先要生成程序界面:先通过语句Image m_ImgUp生成键盘、鼠标松开时显示的键盘图片,再通过语句Image m_ImgDown生成键盘、鼠标按下时显示的键盘图片,最后通过语句m_ImgUp=getImage(getDocumentBase(),img/up.gif)和语句m_ImgDown=getImage(getDocumentBase(),img/down.gif)加载图片,生成钢琴界面。然后,因为要实现模拟钢琴效果,所以要模拟声音的播放,首先通过语句AudioClip m_AudioClip=new AudioClip14生成一个音频对象的数组,保存七个中音和七个高音的声调,最后,通过函数public void keyPressed(KeyEvent e)来响应按下键盘的动作,实现声音的播放。(2)程序实现及注释:/Piano.javaimport java.applet.*;import java.awt.*;import java.awt.event.*;public Piano extends Applet implements MouseListener,KeyListener,MouseMotionListener /变量声明 Image m_ImgUp;/键盘、鼠标松开时显示的键盘图片 Image m_ImgDown;/键盘、鼠标按下时显示的键盘图片 AudioClip m_AudioClip=new AudioClip14; int m_nState=new int14; int m_nOldDownCount=-1; final int IMG_WIDTH=17; final int IMG_HEIGHT=85; final int STATE_UP=0; final int STATE_DOWN=1; /初始化小程序 public void init() for(int i=0;i14;i+) m_nStatei=0; m_ImgUp=getImage(getDocumentBase(),img/up.gif); m_ImgDown=getImage(getDocumentBase(),img/down.gif); MediaTracker mediaTracker=new MediaTracker(this); mediaTracker.addImage(m_ImgUp,0); mediaTracker.addImage(m_ImgDown,1); try mediaTracker.waitForID(0); catch(Exception e) System.out.println(m_ImgUp is not loaded right); try mediaTracker.waitForID(1); catch(Exception e) System.out.println(m_ImgDown is not loaded right); for(int i=0;i14;i+) String sUrl=new String(au/+i+.au); m_AudioClipi=getAudioClip(getCodeBase(),sUrl); addKeyListener(this); addMouseListener(this); addMouseMotionListener(this); /画屏函数 public void paint(Graphics g) for(int i=0;i14;i+) switch(m_nStatei) case STATE_UP: g.drawImage(m_ImgUp,i*IMG_WIDTH,0,this); break; case STATE_DOWN: g.drawImage(m_ImgDown,i*IMG_WIDTH,0,this); break; /主函数 public static void main(String args) Frame frame=new Frame(); Piano piano=new Piano(); frame.add(piano); Dimension dimension=new Dimension(40,200); frame.setSize(dimension); frame.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0); ); frame.setVisible(true); frame.repaint() ; void showSound(int nCount) m_AudioClipnCount.play(); /响应点击鼠标 public void mouseClicked(MouseEvent e) int nMouseCount=e.getClickCount(); /响应鼠标进入 public void mouseEntered(MouseEvent e) /响应鼠标退出 public void mouseExited(MouseEvent e) if(m_nOldDownCount!=-1)m_nStatem_nOldDownCount=STATE_UP; m_nOldDownCount=-1; /响应按下鼠标 public void mousePressed(MouseEvent e) int nX=e.getX(); int nY=e.getY(); int nCount=nX/IMG_WIDTH; m_nStatenCount=STATE_DOWN; showSound(nCount); m_nOldDownCount=nCount; Graphics g=getGraphics(); g.drawImage(m_ImgDown,nCount*IMG_WIDTH,0,this); /响应松开鼠标 public void mouseReleased(MouseEvent e) int nX=e.getX(); int nY=e.getY(); int nCount=nX/IMG_WIDTH; m_nStatenCount=STATE_UP; m_nOldDownCount=-1; Graphics g=getGraphics(); g.drawImage(m_ImgUp,nCount*IMG_WIDTH,0,this); /响应按下键盘 public void keyPressed(KeyEvent e) int nKeyCode=e.getKeyCode(); String sKeyName=e.getKeyText(nKeyCode); boolean bControlDown=e.isControlDown(); int nCount=-1; switch(nKeyCode) case KeyEvent.VK_1: nCount=0; break; case KeyEvent.VK_2: nCount=1; break; case KeyEvent.VK_3: nCount=2; break; case KeyEvent.VK_4: nCount=3; break; case KeyEvent.VK_5: nCount=4; break; case KeyEvent.VK_6: nCount=5; break; case KeyEvent.VK_7: nCount=6; break; default: return; if(bControlDown)nCount=nCount+7; setPianoKeyDown(nCount); showSound(nCount); Graphics g=getGraphics(); g.drawImage(m_ImgDown,nCount*IMG_WIDTH,0,this); public void keyReleased(KeyEvent e) int nKeyCode=e.getKeyCode(); String sKeyName=e.getKeyText(nKeyCode); boolean bControlDown=e.isControlDown(); int nCount=-1; switch(nKeyCode) case KeyEvent.VK_1: nCount=0; break; case KeyEvent.VK_2: nCount=1; break; case KeyEvent.VK_3: nCount=2; break; case KeyEvent.VK_4: nCount=3; break; case KeyEvent.VK_5: nCount=4; break; case KeyEvent.VK_6: nCount=5; break; case KeyEvent.VK_7: nCount=6; break; default: return; if(bControlDown)nCount=nCount+7; m_nStatenCount=STATE_UP; Graphics g=getGraphics(); g.drawImage(m_ImgUp,nCount*IMG_WIDTH,0,this); public void keyTyped(KeyEvent e) void setPianoKeyDown(int nCount) for(int i=0;i14;i+) m_nStatei=STATE_UP; m_nStatenCount=STATE_DOWN; void setAllPianoKeyUp() for(int i=0;i14;i+) m_nStatei=STATE_UP; /响应拖动鼠标 public void mouseDragged(MouseEvent e) int nX=e.getX(); int nY=e.getY(); System.out.println(鼠标拖动到:x=+nX+ y=+nY); int m_nTempCount=nX/IMG_WIDTH; if(m_nTempCount=m_nOldDownCount)return; m_nStatem_nTempCount=STATE_DOWN; m_nStatem_nOldDownCount=STATE_UP; showSound(m_nTempCount); Graphics g=getGraphics(); g.drawImage(m_ImgDown,m_nTempCount*IMG_WIDTH,0,this); g.drawImage(m_ImgUp,m_nOldDownCount*IMG_WIDTH,0,this); m_nOldDownCount=m_nTempCount; /响应移动鼠标 public void mouseMoved(MouseEvent e) int nX=e.getX(); int nY=e.getY(); System.out.println(鼠标移动到:x=+nX+ y=+nY); 三、练习效果(如图98-1所示)本实例代码编写完毕,存盘为:C: j2sdk1.4.0javaprograms Piano.java。打开计算机的命令提示符窗口,然后在命令提示符窗口中,定位到javaprograms目录,输入javac Piano.java 来编译程序,最后将程序加载到网页上。在javaprograms文件夹下新建一个记事本文件,内容为模拟钢琴模拟钢琴请用鼠标和键盘来弹奏这个钢琴。用键盘的1-7键可以弹奏低音1-7,用Ctrl+1到ctrl+7可以弹奏高音1-7。,然后保存为Piano.html的网页文件。本例制作完毕,用浏览器打开Piano.html文件便可以看到制作效果。图98-1 练习效果四、总结提高在本练习中,利用Java的声音播放技术和消息响应机制完成了模拟钢琴的制作。通过图形界面的技术,完成了钢琴键盘的制作。通过运用Windows下程序的键盘响应和鼠标响应技术,实现人机交互。疯狂java简介疯狂Java是广州为学教育科技有限公司(原广州捷途教育科技有限公司)旗下品牌,由李刚老师、肖文吉老师联合创建,作为一家专注于javaEE和3G/4G技术的专业培训服务机构,疯狂Java怀抱“软件强国”的理想,立志以务实的技术来改变中国的软件教育。以“十年磨一剑”的心态打造全中国最强的Java学习体系。疯狂java培训讲义疯狂Java相继出版疯狂Java讲义、疯狂Android讲义、轻量级JavaEE企业应用实战、疯狂Ajax讲义、疯狂XML讲义、经典JavaEE企业应用实战、Struts2.1权威指南、RubyOnRails敏捷开发最佳实践、疯狂Java突破程序员基本功的16课、疯狂JAVA成为程设高手的16堂课等著作。其中疯狂Java体系图书都是已经得到广泛的市场认同,并多次重印的畅销图书,并被多家高校选作教材,部分图书已被翻译成繁体中文版、输出到台湾地区。疯狂java发展概况疯狂Java紧扣IT前沿技术的脉搏,高瞻远瞩立于
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024四川省国有资产经营投资管理有限责任公司招聘笔试参考题库附带答案详解
- 人教部编版七年级下册(道德与法治)第四单元 走进法治天地第九课 法律在我们身边法律保障生活第2课时教学设计
- 餐饮员工培训资料
- 工程项目复盘培训
- 2024华北油田公司招聘7人笔试参考题库附带答案详解
- 电商运营课程培训大纲
- 化学九年级全册3 溶液的酸碱性教学设计
- 铂金专业知识培训
- 多晶硅工艺流程讲解
- 初中信息技术河大版七年级全册第3节 音频与视频教学设计及反思
- 【数学】第2课时 三角形的三边关系教学设计 2024-2025学年北师大版数学七年级下册
- 2025年国家招商局集团有限公司招聘笔试参考题库含答案解析
- 《无人机安全操作能力评估系统技术规范》
- 变压器检修规程范文(2篇)
- 霍乱培训课件PPD
- 《国际物流与供应链管理》课程综述论文:跨境电商供应链管理研究的文献综述4100字
- 数控车削编程与加工 课件 3.5轴类零件综合
- DB37T 4515-2022 罚没物品分类与代码
- 中国传统文化(西安交通大学)知到智慧树章节测试课后答案2024年秋西安交通大学
- 2022浪潮信创服务器CS5260H2技术白皮书
- 港口与航道工程管理与实务一级建造师考试试题与参考答案(2024年)
评论
0/150
提交评论