您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 数据通信与网络 > JAVA程序设计基础-第7章-Java中的鼠标事件与键盘事件
第7章Java中的鼠标事件与键盘事件7.1鼠标事件7.2处理鼠标输入7.3键盘7.1鼠标事件7.1.1MouseListener接口鼠标监听接口(MouseListener)用于监听发生在一个GUI构件上的鼠标事件,包括鼠标的按下、释放、单击、进入和退出。Java同时也提供了与该接口相对应的称作事件剪裁器的抽象类MouseAdapter。在一个实现了MouseListener接口或继承了MouseAdapter类的类中可以定义事件的处理方法,而该类的一个对象则应该用addMouseListener()方法注册到发生鼠标事件的构件上。MouseListener接口包含的方法如下。(1)publicvoidmouseClicked(MouseEvent节e)当在一个构件上单击鼠标时被调用。(2)publicvoidmousePressed(MouseEvente)当在一个构件上按下鼠标按钮时被调用。(3)publicvoidmouseReleased(MouseEvente)当在一个构件上释放鼠标按钮时被调用。(4)publicvoidmouseEntered(MouseEvente)当鼠标指针进入构件时被调用。(5)publicvoidmouseExited(MouseEvente)当鼠标指针退出构件时被调用。7.1.2MouseMoutionListener接口鼠标移动监听接口(MouseMoutionListener)用于监听发生在一个GUI构件上的鼠标移动事件,包括鼠标的移动和拖动,其使用方法与MouseListener接口相同。它所包含的方法如下。(1)publicvoidmouseDragged(MouseEvente)当在一个构件上按下鼠标按钮并且拖动鼠标时该方法被调用。鼠标拖动事件持续到鼠标按钮被释放时为止,而不管鼠标的位置是否超出了原来构件的边界。(2)publicvoidmouseMoved(MouseEvente)当鼠标指针移动时该方法被调用,注意此时鼠标的按钮并没有被按下。在MouseListener接口和MouseMotionListener接口中的所有方法中都有一个参数,它是鼠标事件类MouseEvent的一个对象,当鼠标事件发生时,系统自动生成一个该类的对象,在鼠标事件的处理方法中,经常需在调用该类的方法来获得关于事件的一些信息。MouseEvent类的常用方法如下。(1)publicintgetX()返回当前鼠标指针位置的x坐标值。(2)publicintgetY()返回当前鼠标指针位置的y坐标值。(3)publicintgetClickCount()返回事件中鼠标的点击次数。(4)publicStringparamString()返回一个标识该事件的字符串。7.2处理鼠标输入例7-1:设计一个处理鼠标输入的程序,使得在一个画布构件上拖动鼠标时能画出一段曲线。设计思路:我们假定每当按下鼠标按钮时开始画线,然后拖动鼠标继续画线过程,释放鼠标时表示一段曲线的画线过程结束,程序允许在画布构件上画出多段曲线。一段曲线实际上由许多小的直线段构成,因此我们只需记录按下鼠标按钮时的坐标点、拖动鼠标时所产生的所有坐标点及释放鼠标时的坐标点,然后在这些坐标点之间顺序地画出直线段即连成一段曲线。为了保存这些坐标点,我们使用了一个Polygon对象poly,它是由Java系统提供的一个类,可以保存多边形的各个顶点坐标并可以动态地加入新的坐标点。在各段不同的曲线之间加入一个特殊的标志点(-1,-1)以便在paint()方法中画线时确定一条新的曲线段的起点。所有坐标点的记录及保存都是在鼠标事件接口的mousePressed()方法、mouseReleased()方法及鼠标移动事件接口中的mouseDragged()方法中完成的。在paint()方法中根据所记录的坐标点画出各个曲线段。importjava.awt.event.*;importjava.awt.*;publicclassmouseextendsFrameimplementsActionListener{Buttonbutn=newButton(手画线状态);canvas1can=newcanvas1();publicstaticvoidmain(String[]args){newmouse();}mouse(){Framewin1=newFrame();win1.setLayout(newBorderLayout(0,0));win1.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});win1.add(butn,BorderLayout.NORTH);butn.addActionListener(this);can.setSize(350,200);can.setBackground(Color.green);win1.add(can,BorderLayout.CENTER);win1.setTitle(用鼠标画直线);win1.setSize(400,200);win1.setVisible(true);}publicvoidactionPerformed(ActionEvente){if(e.getSource()==butn)can.mode=1;//设置画线状态}}classcanvas1extendsCanvasimplementsMouseListener,MouseMotionListener{intmode=0;//方式变量,初始值为非画线状态Polygonpoly=newPolygon();//用类Polygon的对象来存储画线时点的坐标canvas1(){addMouseListener(this);//注册鼠标事件addMouseMotionListener(this);//注册鼠标移动事件}publicvoidpaint(Graphicsg){g.setColor(Color.blue);//设置画笔颜色if(mode==1&&poly.npoints1)//用坐标点画出曲线的方法for(inti=0;ipoly.npoints-1;i++){if(poly.xpoints[i+1]==-1){i++;continue;}elseg.drawLine(poly.xpoints[i],poly.ypoints[i],poly.xpoints[i+1],poly.ypoints[i+1]);}}publicvoidmouseClicked(MouseEvente){}publicvoidmousePressed(MouseEvente){//按下鼠标按钮时记录坐标起点poly.addPoint(e.getX(),e.getY());}publicvoidmouseReleased(MouseEvente){//释放鼠标记录坐标点poly.addPoint(e.getX(),e.getY());//加入手画线的终点坐标poly.addPoint(-1,-1);//加入一个特殊的标记点它标志曲线的结束repaint();//重画曲线}publicvoidmouseEntered(MouseEvente){}publicvoidmouseExited(MouseEvente){}publicvoidmouseMoved(MouseEvente){}publicvoidmouseDragged(MouseEvente){//拖动鼠标时加入坐标点并重画曲线poly.addPoint(e.getX(),e.getY());repaint();}}运行结果见图7-1。图7-17.3键盘7.3.1键盘事件在Java中与键盘事件有关的接口和类主要有KeyListener、KeyAdapter及KeyEvent。其中KeyListener和KeyAdapter用于监听键盘事件的发生并将其传送到相应的事件处理方法中去,而KeyEvent主要用于提供事件发生时的有关信息。KeyListener接口能够监听的键盘事件有3种:键按下(Pressed)、键释放(Released)及键的按下并释放(Typed),相应的事件处理方法如下。(1)publicvoidkeyTyped(KeyEvente)当键盘上的一个键被按下并释放后该方法被调用。(2)publicvoidkeyPressed(KeyEvente)当键盘上的一个键盘被按下后该方法被调用。(3)publicvoidkeyReleased(KeyEvente)当键盘上的一个键盘被释放时该方法被调用。KeyEvent类中常用的方法如下。(1)publicintgetKeyCode()返回键盘事件中相关键的整数类型键码。(2)publicchargetKeyChar()返回键盘事件中相关键的字符类型键码。例如,对于Shift+a键返回的字符是A。(3)publicstaticStringgetKeyText(intkeyCode)返回一个描述由参数intkeyCode指定的键的字符串,如HOME,F1或A.等。(4)publicStringparamString()返回一个标识该事件的参数字符串。7.3.2处理键盘输入例7-2:处理键盘输入的例子。在该例子中,创建了一个文本框和4个文本区,文本框用来接受键盘的输入并注册了键盘事件监听者。在前3个文本区中分别显示在Pressed、Released、Typed方法中相关联的键所对应的字符,比如如果按下的键是“a”则显示“a”,而如果是一些功能键如“HOME”则没有相对应的键符可以显示,此时我们用e.getKeyText(e.getKeyCode())在第4个文本区中显示该功能键对应的描述性字符串,如Home、Left、F1、End等。importjava.awt.event.*;importjava.awt.*;publicclasskeyimplementsKeyListener{TextFieldtx=newTextField(20);TextAreata1=newTextArea(显示按下的键:\n,7,20);TextAreata2=newTextArea(显示释放的键:\n,7,20);TextAreata3=newTextArea(显示控制与功能键:\n,7,20);TextAreata4=newTextArea(null,2,20);publicvoidkeyTyped(KeyEvente){ta4.append(String.valueOf(e.getKeyChar()));}publicvoidkeyPressed(KeyEvente){ta1.append(String.valueOf(e.getKeyChar()));//ta1.append(String.valueOf(e.getKeyCode()));ta3.append(e.getKeyText(e.getKeyCode())+\n);}publicvoidkeyReleased(KeyEvente){ta2.append(String.valueOf(e.getKeyChar()));}key(){Framewin1=newFrame(Keyevent应用);win1.addWindowListener(newWindowAdapter(){publicvoidwindowClosing(WindowEvente){System.exit(0);}});win1.setLayout(newFlowLayout());Panelp1=newPanel();win1.add(p1);p1.add(newLabel(请在此编辑框内键入字符:));p1.add(tx);tx.addKeyListener(this);Panelp2=new
本文标题:JAVA程序设计基础-第7章-Java中的鼠标事件与键盘事件
链接地址:https://www.777doc.com/doc-3550514 .html