1 / 39

第7章 Java 中的鼠标事件与键盘事件

第7章 Java 中的鼠标事件与键盘事件. 7.1 鼠 标 事 件 7.2 处理鼠标输入 7.3 键 盘. 7.1 鼠 标 事 件. 7.1.1 MouseListener 接口 鼠标监听接口( MouseListener) 用于监听发生在一个 GUI 构件上的鼠标事件,包括鼠标的按下、释放、单击、进入和退出。 Java 同时也提供了与该接口相对应的称作事件剪裁器的抽象类 MouseAdapter。.

abel
Download Presentation

第7章 Java 中的鼠标事件与键盘事件

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第7章 Java中的鼠标事件与键盘事件 • 7.1 鼠 标 事 件 • 7.2 处理鼠标输入 • 7.3 键 盘

  2. 7.1 鼠 标 事 件 • 7.1.1 MouseListener接口 • 鼠标监听接口(MouseListener)用于监听发生在一个GUI构件上的鼠标事件,包括鼠标的按下、释放、单击、进入和退出。Java同时也提供了与该接口相对应的称作事件剪裁器的抽象类MouseAdapter。

  3. 在一个实现了MouseListener接口或继承了MouseAdapter类的类中可以定义事件的处理方法,而该类的一个对象则应该用addMouseListener()方法注册到发生鼠标事件的构件上。在一个实现了MouseListener接口或继承了MouseAdapter类的类中可以定义事件的处理方法,而该类的一个对象则应该用addMouseListener()方法注册到发生鼠标事件的构件上。 • MouseListener接口包含的方法如下。

  4. (1)public void mouseClicked(MouseEvent节e) 当在一个构件上单击鼠标时被调用。 • (2)public void mousePressed(MouseEvent e) 当在一个构件上按下鼠标按钮时被调用。 • (3)public void mouseReleased(MouseEvent e) 当在一个构件上释放鼠标按钮时被调用。

  5. (4)public void mouseEntered(MouseEvent e) 当鼠标指针进入构件时被调用。 • (5)public void mouseExited(MouseEvent e) 当鼠标指针退出构件时被调用。

  6. 7.1.2 MouseMoutionListener接口 • 鼠标移动监听接口(MouseMoutionListener)用于监听发生在一个GUI构件上的鼠标移动事件,包括鼠标的移动和拖动,其使用方法与MouseListener接口相同。它所包含的方法如下。

  7. (1)public void mouseDragged(MouseEvent e) 当在一个构件上按下鼠标按钮并且拖动鼠标时该方法被调用。鼠标拖动事件持续到鼠标按钮被释放时为止,而不管鼠标的位置是否超出了原来构件的边界。 • (2)public void mouseMoved(MouseEvent e) 当鼠标指针移动时该方法被调用,注意此时鼠标的按钮并没有被按下。

  8. 在MouseListener接口和MouseMotionListener接口中的所有方法中都有一个参数,它是鼠标事件类MouseEvent的一个对象,当鼠标事件发生时,系统自动生成一个该类的对象,在鼠标事件的处理方法中,经常需在调用该类的方法来获得关于事件的一些信息。MouseEvent类的常用方法如下。在MouseListener接口和MouseMotionListener接口中的所有方法中都有一个参数,它是鼠标事件类MouseEvent的一个对象,当鼠标事件发生时,系统自动生成一个该类的对象,在鼠标事件的处理方法中,经常需在调用该类的方法来获得关于事件的一些信息。MouseEvent类的常用方法如下。

  9. (1)public int getX() 返回当前鼠标指针位置的x坐标值。 • (2)public int getY() 返回当前鼠标指针位置的y坐标值。 • (3)public int getClickCount() 返回事件中鼠标的点击次数。 • (4)public String paramString() 返回一个标识该事件的字符串。

  10. 7.2 处理鼠标输入 • 例7-1:设计一个处理鼠标输入的程序,使得在一个画布构件上拖动鼠标时能画出一段曲线。 • 设计思路:我们假定每当按下鼠标按钮时开始画线,然后拖动鼠标继续画线过程,释放鼠标时表示一段曲线的画线过程结束,程序允许在画布构件上画出多段曲线。

  11. 一段曲线实际上由许多小的直线段构成,因此我们只需记录按下鼠标按钮时的坐标点、拖动鼠标时所产生的所有坐标点及释放鼠标时的坐标点,然后在这些坐标点之间顺序地画出直线段即连成一段曲线。为了保存这些坐标点,我们使用了一个Polygon对象poly,它是由Java系统提供的一个类,可以保存多边形的各个顶点坐标并可以动态地加入新的坐标点。一段曲线实际上由许多小的直线段构成,因此我们只需记录按下鼠标按钮时的坐标点、拖动鼠标时所产生的所有坐标点及释放鼠标时的坐标点,然后在这些坐标点之间顺序地画出直线段即连成一段曲线。为了保存这些坐标点,我们使用了一个Polygon对象poly,它是由Java系统提供的一个类,可以保存多边形的各个顶点坐标并可以动态地加入新的坐标点。

  12. 在各段不同的曲线之间加入一个特殊的标志点(-1,-1)以便在paint()方法中画线时确定一条新的曲线段的起点。所有坐标点的记录及保存都是在鼠标事件接口的mousePressed()方法、mouseReleased()方法及鼠标移动事件接口中的mouseDragged()方法中完成的。在paint()方法中根据所记录的坐标点画出各个曲线段。在各段不同的曲线之间加入一个特殊的标志点(-1,-1)以便在paint()方法中画线时确定一条新的曲线段的起点。所有坐标点的记录及保存都是在鼠标事件接口的mousePressed()方法、mouseReleased()方法及鼠标移动事件接口中的mouseDragged()方法中完成的。在paint()方法中根据所记录的坐标点画出各个曲线段。

  13. import java.awt.event.*; • import java.awt.*; • public class mouse extends Frame implements ActionListener{ • Button butn=new Button("手画线状态"); • canvas1 can=new canvas1();

  14. public static void main(String[] args) { • new mouse(); • } • mouse(){ • Frame win1=new Frame(); • win1.setLayout(new BorderLayout(0,0)); • win1.addWindowListener(new WindowAdapter(){

  15. public void windowClosing(WindowEvent e) { • System.exit(0);}}); • win1.add(butn,BorderLayout.NORTH); • butn.addActionListener(this); • can.setSize(350,200); • can.setBackground(Color.green);

  16. win1.add(can,BorderLayout.CENTER); • win1.setTitle("用鼠标画直线"); • win1.setSize(400,200); • win1.setVisible(true); • } • public void actionPerformed(ActionEvent e){ • if(e.getSource()==butn) • can.mode=1;//设置画线状态 • } • }

  17. class canvas1 extends Canvas implements MouseListener,MouseMotionListener{ • int mode=0;//方式变量,初始值为非画线状态 • Polygon poly=new Polygon();//用类Polygon的对象来存储画线时点的坐标 • canvas1(){ • addMouseListener(this);//注册鼠标事件 • addMouseMotionListener(this);//注册鼠标移动事件 • }

  18. public void paint(Graphics g) { • g.setColor(Color.blue);//设置画笔颜色 • if(mode==1&&poly.npoints>1)//用坐标点画出曲线的方法 • for(int i=0;i<poly.npoints-1;i++){ • if (poly.xpoints[i+1]==-1){ • i++; • continue; • }

  19. else • g.drawLine(poly.xpoints[i],poly.ypoints[i],poly.xpoints[i+1],poly.ypoints[i+1]); • } • } • public void mouseClicked(MouseEvent e){}

  20. 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();//重画曲线 • }

  21. public void mouseEntered(MouseEvent e){} • public void mouseExited(MouseEvent e){} • public void mouseMoved(MouseEvent e){}

  22. public void mouseDragged(MouseEvent e){//拖动鼠标时加入坐标点并重画曲线 • poly.addPoint(e.getX(),e.getY()); • repaint(); • } • } • 运行结果见图7-1。

  23. 图7-1

  24. 7.3 键 盘 • 7.3.1 键盘事件 • 在Java中与键盘事件有关的接口和类主要有KeyListener、KeyAdapter及KeyEvent。其中KeyListener和KeyAdapter用于监听键盘事件的发生并将其传送到相应的事件处理方法中去,而KeyEvent主要用于提供事件发生时的有关信息。

  25. KeyListener接口能够监听的键盘事件有3种:键按下(Pressed)、键释放(Released)及键的按下并释放(Typed),相应的事件处理方法如下。KeyListener接口能够监听的键盘事件有3种:键按下(Pressed)、键释放(Released)及键的按下并释放(Typed),相应的事件处理方法如下。 • (1)public void keyTyped(KeyEvent e) 当键盘上的一个键被按下并释放后该方法被调用。

  26. (2)public void keyPressed(KeyEvent e) 当键盘上的一个键盘被按下后该方法被调用。 • (3)public void keyReleased(KeyEvent e) 当键盘上的一个键盘被释放时该方法被调用。

  27. KeyEvent类中常用的方法如下。 • (1)public int getKeyCode() 返回键盘事件中相关键的整数类型键码。 • (2)public char getKeyChar() 返回键盘事件中相关键的字符类型键码。例如,对于Shift+a键返回的字符是A。

  28. (3)public static String getKeyText(int keyCode) 返回一个描述由参数int keyCode指定的键的字符串,如"HOME","F1" 或"A".等。 • (4)public String paramString() 返回一个标识该事件的参数字符串。

  29. 7.3.2 处理键盘输入 • 例7-2:处理键盘输入的例子。在该例子中,创建了一个文本框和4个文本区,文本框用来接受键盘的输入并注册了键盘事件监听者。在前3个文本区中分别显示在Pressed、Released、Typed方法中相关联的键所对应的字符,

  30. 比如如果按下的键是“a”则显示“a”,而如果是一些功能键如“HOME”则没有相对应的键符可以显示,此时我们用e.getKeyText(e.getKeyCode())在第4个文本区中显示该功能键对应的描述性字符串,如Home、Left、F1、End等。比如如果按下的键是“a”则显示“a”,而如果是一些功能键如“HOME”则没有相对应的键符可以显示,此时我们用e.getKeyText(e.getKeyCode())在第4个文本区中显示该功能键对应的描述性字符串,如Home、Left、F1、End等。

  31. 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);

  32. TextArea ta3 = new TextArea("显示控制与功能键:\n",7,20); • TextArea ta4 = new TextArea(null,2,20); • public void keyTyped(KeyEvent e) { • ta4.append(String.valueOf(e.getKeyChar())); • }

  33. public void keyPressed(KeyEvent e) { • ta1.append(String.valueOf(e.getKeyChar())); • //ta1.append(String.valueOf(e.getKeyCode()));

  34. ta3.append(e.getKeyText(e.getKeyCode())+"\n"); • } • public void keyReleased(KeyEvent e) { • ta2.append(String.valueOf(e.getKeyChar())); • }

  35. key(){ • Frame win1 = new Frame("Key event 应用"); • win1.addWindowListener(new WindowAdapter(){ • public void windowClosing(WindowEvent e) { • System.exit(0);}});

  36. win1.setLayout(new FlowLayout()); • Panel p1 = new Panel(); • win1.add(p1); • p1.add(new Label("请在此编辑框内键入字符: ")); • p1.add(tx); • tx.addKeyListener(this); • Panel p2 = new Panel();

  37. win1.add(p2); • p2.add(ta1); • p2.add(ta2); • p2.add(ta3); • Panel p3 = new Panel(); • win1.add(p3);

  38. p3.add(new Label("显示按下并释放的键盘: ")); • p3.add(ta4); • win1.setSize(500,280); • win1.setVisible(true); • } • public static void main(String[] args) { • new key(); • } • }

  39. 运行结果见图7-2。 图7-2

More Related