注册
 找回密码
 注册
江西广告网
查看: 236|回复: 0
打印 上一主题 下一主题

更好的捕捉鼠标事件

[复制链接]

该用户从未签到

1
跳转到指定楼层
发表于 2008-12-27 17:41:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
  更好的捕捉鼠标事件---看看流行的和过时的鼠标事件      原作: Tony Sintes      编译: Jeru Liu      原文出处: http://www.javaworld.com/javaworld/javaqa/2000-07/02-qa-0714-mouse.html      MouseListener 方法接口中的mouseClicked() 方法和mousePressed() 方法      有什么区别?      这是一个热门的话题,让我们来深入的找寻答案,Java’s AWT 库 提供了两个接口来监听和接收鼠标事件. 一个是 java.awt.event.MouseListener:               public interface MouseListener extends EventListener      {      public void mousePressed(MouseEvent e);      public void mouseReleased(MouseEvent e);      public void mouseClicked(MouseEvent e);      public void mouseEntered(MouseEvent e);      public void mouseExited(MouseEvent e);      }      另一个是 java.awt.event.MouseMotionListener:         public interface MouseMotionListener extends EventListener      {      public void mouseDragged(MouseEvent e);      public void mouseMoved(MouseEvent e);      }      Swing 提供了 MouseInputListener, 这个接口的同时扩展了MouseMotionListener 和 MouseListener 接口.      让我们来看看这些接口中的方法:      · mousePressed() 当用户按下鼠标按钮时发生.      · mouseReleased() 当用户松开鼠标按钮时发生.      · mouseClicked() 当用户按下并松开鼠标按钮时发生. 用户在选择或双击图标的时候通常会点击鼠标按钮. 用户如果在松开鼠标之前移动鼠标,点击不会导致鼠标相应事件出现.      · 因为点击鼠标是按下鼠标和松开鼠标的结合, 在事件分配给 mouseClicked() 方法之前, mousePressed() 和 mouseReleased() 方法已同时被调用.      · mouseEntered() 当鼠标离开当前组件并进入你所监听的组件时激活事件.      · mouseExited() 当鼠标离开你所监听的组件时发生.      · mouseDragged() 当用户按下鼠标按钮并在松开之前进行移动时发生.在mouseDragged() 后松开鼠标不会导致mouseClicked().      · mouseMoved() 当鼠标在组件上移动而 不时拖动时发生.      要监听鼠标事件就必须调用这些接口之一,或扩展一个鼠标适配器(mouse adapters) 类. AWT 提供了两种监听适配器(listener adapters): java.awt.event.MouseAdapter 和 java.awt.event.MouseMotionAdapter.      Swing 为MouseInputListener提供了一个叫做javax.swing.event.MouseInputAdapter的适配器. 有了适配器你就不必调用接口中每个方法了. 取而代之, 你只需简单的扩展适配器并重写你要监听的方法就可以了.   如果你还是很迷惑, 再看看API 并写个小测试程序. 有时尝试理解不同事件的最好方法different events. 我写了一个小小的应用程序来表现两种鼠标事件的区别.这里是完整的代码:         import java.awt.*;      import java.awt.event.*;      public class MouseTest extends Frame      {      public MouseTest()      {      Button b = new Button("JavaWorld JavaQ&A");      b.addActionListener( new ActionListener() {      public void actionPerformed(ActionEvent e)      {      System.exit(0);      }      }      );      add(b,BorderLayout.NORTH);      addMouseListener(new MouseTest.MouseHandler());      addMouseMotionListener(new MouseTest.MouseMotionHandler());      }         // MouseHandler is an inner class that implements the MouseListener.      // Each method simply prints out a message to the command line.      private class MouseHandler implements MouseListener      {      public void mousePressed(MouseEvent e)      {      System.out.println("mouse pressed");      }      public void mouseClicked(MouseEvent e)      {      System.out.println("moused clicked");      }      public void mouseReleased(MouseEvent e)      {      System.out.println("mouse released");      }      public void mouseEntered(MouseEvent e)      {      System.out.println("mouse entered");      }      public void mouseExited(MouseEvent e)      {      System.out.println("mouse exited");      }      }      // MouseMotionHandler is an inner class that implements the MouseMotionListener.      // Each method simply prints out a message to the command line.      private class MouseMotionHandler implements MouseMotionListener      {      public void mouseMoved(MouseEvent e)      {      System.out.println("mouse moved");      }      public void mouseDragged(MouseEvent e)      {      System.out.println("mouse dragged");      }      }      public static void main(String[] args)      {      new MouseTest().show();      }      }      这个应用程序建立了一个窗口和一个按钮.当你移动鼠标并按下按钮时, 应用程序就会在命令行打印出文本消息, 让你看到鼠标响应和事件间的对应关系.      象上边那样写一个小小的测试程序是对陌生的API 进行试验的好方法.   
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表