




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、JAVA程序设计基础-第7章-Java中的鼠标事件与键盘事件第一页,共39页。7.1 鼠 标 事 件7.1.1 MouseListener接口鼠标监听接口(MouseListener)用于监听发生在一个GUI构件上的鼠标事件,包括鼠标的按下、释放、单击、进入和退出。Java同时也提供了与该接口相对应的称作事件剪裁器的抽象类MouseAdapter。第二页,共39页。在一个实现了MouseListener接口或继承了MouseAdapter类的类中可以定义事件的处理方法,而该类的一个对象则应该用addMouseListener()方法注册到发生鼠标事件的构件上。MouseListener接口包含
2、的方法如下。第三页,共39页。(1)public void mouseClicked(MouseEvent节e) 当在一个构件上单击鼠标时被调用。(2)public void mousePressed(MouseEvent e) 当在一个构件上按下鼠标按钮时被调用。(3)public void mouseReleased(MouseEvent e) 当在一个构件上释放鼠标按钮时被调用。第四页,共39页。(4)public void mouseEntered(MouseEvent e) 当鼠标指针进入构件时被调用。(5)public void mouseExited(MouseEvent e)
3、当鼠标指针退出构件时被调用。第五页,共39页。7.1.2 MouseMoutionListener接口鼠标移动监听接口(MouseMoutionListener)用于监听发生在一个GUI构件上的鼠标移动事件,包括鼠标的移动和拖动,其使用方法与MouseListener接口相同。它所包含的方法如下。第六页,共39页。(1)public void mouseDragged(MouseEvent e) 当在一个构件上按下鼠标按钮并且拖动鼠标时该方法被调用。鼠标拖动事件持续到鼠标按钮被释放时为止,而不管鼠标的位置是否超出了原来构件的边界。(2)public void mouseMoved(MouseE
4、vent e) 当鼠标指针移动时该方法被调用,注意此时鼠标的按钮并没有被按下。第七页,共39页。在MouseListener接口和MouseMotionListener接口中的所有方法中都有一个参数,它是鼠标事件类MouseEvent的一个对象,当鼠标事件发生时,系统自动生成一个该类的对象,在鼠标事件的处理方法中,经常需在调用该类的方法来获得关于事件的一些信息。MouseEvent类的常用方法如下。第八页,共39页。(1)public int getX() 返回当前鼠标指针位置的x坐标值。(2)public int getY() 返回当前鼠标指针位置的y坐标值。(3)public int ge
5、tClickCount() 返回事件中鼠标的点击次数。(4)public String paramString() 返回一个标识该事件的字符串。第九页,共39页。7.2 处理鼠标输入例7-1:设计一个处理鼠标输入的程序,使得在一个画布构件上拖动鼠标时能画出一段曲线。设计思路:我们假定每当按下鼠标按钮时开始画线,然后拖动鼠标继续画线过程,释放鼠标时表示一段曲线的画线过程结束,程序允许在画布构件上画出多段曲线。第十页,共39页。一段曲线实际上由许多小的直线段构成,因此我们只需记录按下鼠标按钮时的坐标点、拖动鼠标时所产生的所有坐标点及释放鼠标时的坐标点,然后在这些坐标点之间顺序地画出直线段即连成一段
6、曲线。为了保存这些坐标点,我们使用了一个Polygon对象poly,它是由Java系统提供的一个类,可以保存多边形的各个顶点坐标并可以动态地加入新的坐标点。第十一页,共39页。在各段不同的曲线之间加入一个特殊的标志点(1,1)以便在paint()方法中画线时确定一条新的曲线段的起点。所有坐标点的记录及保存都是在鼠标事件接口的mousePressed()方法、mouseReleased()方法及鼠标移动事件接口中的mouseDragged()方法中完成的。在paint()方法中根据所记录的坐标点画出各个曲线段。第十二页,共39页。import java.awt.event.*;import ja
7、va.awt.*;public class mouse extends Frame implements ActionListener Button butn=new Button(手画线状态); canvas1 can=new canvas1();第十三页,共39页。 public static void main(String args) new mouse(); mouse() Frame win1=new Frame(); win1.setLayout(new BorderLayout(0,0); win1.addWindowListener(new WindowAdapter()第十
8、四页,共39页。public void windowClosing(WindowEvent e) System.exit(0);); win1.add(butn,BorderLayout.NORTH); butn.addActionListener(this); can.setSize(350,200); can.setBackground(Color.green); 第十五页,共39页。win1.add(can,BorderLayout.CENTER); win1.setTitle(用鼠标画直线); win1.setSize(400,200); win1.setVisible(true);
9、public void actionPerformed(ActionEvent e) if(e.getSource()=butn) can.mode=1;/设置画线状态 第十六页,共39页。class canvas1 extends Canvas implements MouseListener,MouseMotionListener int mode=0;/方式变量,初始值为非画线状态 Polygon poly=new Polygon();/用类Polygon的对象来存储画线时点的坐标 canvas1() addMouseListener(this);/注册鼠标事件 addMouseMoti
10、onListener(this);/注册鼠标移动事件 第十七页,共39页。 public void paint(Graphics g) g.setColor(Color.blue);/设置画笔颜色 if(mode=1&poly.npoints1)/用坐标点画出曲线的方法 for(int i=0;ipoly.npoints-1;i+) if (poly.xpointsi+1=-1) i+; continue; 第十八页,共39页。 elseg.drawLine(poly.xpointsi,poly.ypointsi,poly.xpointsi+1,poly.ypointsi+1); public
11、 void mouseClicked(MouseEvent e) 第十九页,共39页。public void mousePressed(MouseEvent e)/按下鼠标按钮时记录坐标起点 poly.addPoint(e.getX(),e.getY(); public void mouseReleased(MouseEvent e)/释放鼠标记录坐标点 poly.addPoint(e.getX(),e.getY();/加入手画线的终点坐标 poly.addPoint(-1,-1);/加入一个特殊的标记点它标志曲线的结束 repaint();/重画曲线 第二十页,共39页。 public vo
12、id mouseEntered(MouseEvent e) public void mouseExited(MouseEvent e) public void mouseMoved(MouseEvent e)第二十一页,共39页。 public void mouseDragged(MouseEvent e)/拖动鼠标时加入坐标点并重画曲线 poly.addPoint(e.getX(),e.getY(); repaint(); 运行结果见图7-1。第二十二页,共39页。图7-1第二十三页,共39页。7.3 键 盘7.3.1 键盘事件在Java中与键盘事件有关的接口和类主要有KeyListener
13、、KeyAdapter及KeyEvent。其中KeyListener和KeyAdapter用于监听键盘事件的发生并将其传送到相应的事件处理方法中去,而KeyEvent主要用于提供事件发生时的有关信息。第二十四页,共39页。KeyListener接口能够监听的键盘事件有3种:键按下(Pressed)、键释放(Released)及键的按下并释放(Typed),相应的事件处理方法如下。(1)public void keyTyped(KeyEvent e) 当键盘上的一个键被按下并释放后该方法被调用。第二十五页,共39页。(2)public void keyPressed(KeyEvent e) 当键
14、盘上的一个键盘被按下后该方法被调用。(3)public void keyReleased(KeyEvent e) 当键盘上的一个键盘被释放时该方法被调用。第二十六页,共39页。KeyEvent类中常用的方法如下。(1)public int getKeyCode() 返回键盘事件中相关键的整数类型键码。(2)public char getKeyChar() 返回键盘事件中相关键的字符类型键码。例如,对于Shift+a键返回的字符是A。第二十七页,共39页。(3)public static String getKeyText(int keyCode) 返回一个描述由参数int keyCode指定的
15、键的字符串,如HOME,F1 或A.等。(4)public String paramString() 返回一个标识该事件的参数字符串。第二十八页,共39页。7.3.2 处理键盘输入例7-2:处理键盘输入的例子。在该例子中,创建了一个文本框和4个文本区,文本框用来接受键盘的输入并注册了键盘事件监听者。在前3个文本区中分别显示在Pressed、Released、Typed方法中相关联的键所对应的字符,第二十九页,共39页。比如如果按下的键是“a”则显示“a”,而如果是一些功能键如“HOME”则没有相对应的键符可以显示,此时我们用e.getKeyText(e.getKeyCode())在第4个文本区
16、中显示该功能键对应的描述性字符串,如Home、Left、F1、End等。第三十页,共39页。import java.awt.event.*;import java.awt.*;public class key implements KeyListener TextField tx = new TextField(20); TextArea ta1 = new TextArea(显示按下的键:n,7,20); TextArea ta2 = new TextArea(显示释放的键:n,7,20);第三十一页,共39页。 TextArea ta3 = new TextArea(显示控制与功能键:n,
17、7,20); TextArea ta4 = new TextArea(null,2,20); public void keyTyped(KeyEvent e) ta4.append(String.valueOf(e.getKeyChar(); 第三十二页,共39页。 public void keyPressed(KeyEvent e) ta1.append(String.valueOf(e.getKeyChar(); /ta1.append(String.valueOf(e.getKeyCode(); 第三十三页,共39页。ta3.append(e.getKeyText(e.getKeyCod
18、e()+n); public void keyReleased(KeyEvent e) ta2.append(String.valueOf(e.getKeyChar(); 第三十四页,共39页。 key() Frame win1 = new Frame(Key event 应用); win1.addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););第三十五页,共39页。 win1.setLayout(new FlowLayout(); Panel p1 = new Panel(); win1.add(p1); p1.add(new Label(请在此编辑框内键入字符: ); p1.add(tx); tx.addKeyListener(this); Panel p2 = new Pan
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 工程师岗位安全培训试题及答案
- 如何通过家具设计提升小空间的使用效率与美观性试题及答案
- 电商与农业资源有效配置的研究试题及答案
- 2025教育学面试题目及答案
- 网易社区面试题及答案
- 航空航天零部件加工2025年高精度加工技术产业链分析报告
- 家具设计中的环保材料应用与实际案例分析试题及答案
- 2025年智能家居研发生产基地建设智能化家居产品市场推广策略报告
- 搬迁资产处置计划书
- 生态恢复试题及答案详解
- 免疫缺陷病例讨论
- 排球比赛规则与裁判法
- 中考生物二轮复习实验突破课件:花生果实大小的变异探究实验(含答案)
- 决策树在饲料技术推广中的应用研究
- 空管自动化系统的基本组成与功能课件
- 安宁疗护之舒适护理
- 2023年杭州市规划局拱墅规划分局编外人员招考考前自测高频难、易考点模拟试题(共500题)含答案详解
- 品牌国际化对企业出口竞争力和品牌价值的影响研究
- 大模型的因果推理与可解释性
- 《圆柱与圆锥》单元整体教学设计展示
- journal of affective disorders投稿格式要求
评论
0/150
提交评论