服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > JAVA > 新手入门 > 基础入门 > 查看文档

java基础:看看流行的和过时的鼠标事件

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 进行试验的好方法.

(t006)

扫描关注微信公众号