让我们来看看这些接口中的方法:

・ mousePressed() 当用户按下鼠标按钮时发生.  

・ mouseReleased() 当用户松开鼠标按钮时发生.

・ mouseClicked() 当用户按下并松开鼠标按钮时发生. 用户在选择或双击图标的时候通常会点击鼠标按钮. 用户如果在松开鼠标之前移动鼠标,点击不会导致鼠标相应事件出现.  

・ 因为点击鼠标是按下鼠标和松开鼠标的结合, 在事件分配给 mouseClicked() 方法之前, mousePressed() 和 mouseReleased() 方法已同时被调用.  

・ mouseEntered() 当鼠标离开当前组件并进入你所监听的组件时激活事件.

・ mouseExited() 当鼠标离开你所监听的组件时发生.  

・ mouseDragged() 当用户按下鼠标按钮并在松开之前进行移动时发生.在mouseDragged() 后松开鼠标不会导致mouseClicked().  

・ mouseMoved() 当鼠标在组件上移动而 不时拖动时发生.

 

一、

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

--------------------------------------------------------------------------------------------------------------
          MouseListener                              mouseClicked(MouseEvent e)
                                                               mouseEntered(MouseEvent e)
                                                               mouseExited(MouseEvent e)
                                                               mousePressed(MouseEvent e)
                                                               mouseReleased(MouseEvent e)
--------------------------------------------------------------------------------------------------------------
MouseDemo1.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/*我们继承WindowAdapter抽象类并实现MouseListener interface,
*因此我们必须把MouseListener中的5个方法都实现,如果不想实现
*可用匿名内部类的方法编写处理程序。
*/
public class MouseDemo1 extends WindowAdapter implements MouseListener{
    JFrame f=null;
    JButton b1=null;
    JLabel label=null;
    
    public MouseDemo1(){
       f=new JFrame("MouseDemo1");
       Container contentPane=f.getContentPane();
       contentPane.setLayout(new GridLayout(2,1));
       b1=new JButton("按钮");
       label=new JLabel("起始状态,还没有鼠标事件",JLabel.CENTER);
       b1.addMouseListener(this);
       contentPane.add(label);
       contentPane.add(b1);
       f.pack();
       f.show();
       f.addWindowListener(this);
    }
    public void mousePressed(MouseEvent e){
        label.setText("你已经压下鼠标按钮");
    }
    public void mouseReleased(MouseEvent e){
        label.setText("你已经放开鼠标按钮");
    }
    public void mouseEntered(MouseEvent e){
        label.setText("鼠标光标进入按钮");
    }
    public void mouseExited(MouseEvent e){
        label.setText("鼠标光标离开按钮");
    }
    public void mouseClicked(MouseEvent e){
        label.setText("你已经按下按钮");
    }
    public void windowClosing(WindowEvent e){
        System.exit(0);
    }
    public static void main(String[] args){
       new MouseDemo1();        
    }
}

2-1-2:MouseMotionListener的使用:
         下面是讨论MouseMotionListener的使用时机,它提供的下面的两个方法,可让你随时掌握鼠标的坐标,并处理拖曳鼠标
的操作。
--------------------------------------------------------------------------------------------------------------
          MouseMotionListener                   mouseDragged(MouseEvent e)
                                                               mouseMoved(MouseEvent e)
--------------------------------------------------------------------------------------------------------------
下面的范例让你知道鼠标在JFrame上的坐标,并拖曳出直线来。
例子:MouseDemo3.java

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/*为了达到画线的功能,我们分别implements MouseListener与MouseMotionListener.
*/
public class MouseDemo3 extends JFrame implements MouseListener,MouseMotionListener{
     int flag;//flag=1代表Mouse Moved,flag=2代表Mouse Dragged
     int x=0;
     int y=0;
     int startx,starty,endx,endy;//起始坐标与终点坐标
     public MouseDemo3(){
        Container contentPane=getContentPane();
        contentPane.addMouseListener(this);
        contentPane.addMouseMotionListener(this);
        setSize(300,300);
        show();
        addWindowListener(
                  new WindowAdapter(){
                     public void windowClosing(WindowEvent e){
                        System.exit(0);
                     }
              }
        );        
     }        
     /*由mousePressed(),mouseReleased()取得示拖曳的开始与结束坐标*/
     public void mousePressed(MouseEvent e){
        startx=e.getX();
        starty=e.getY();
     }
     public void mouseReleased(MouseEvent e){
        endx=e.getX();
        endy=e.getY();
     }
     public void mouseEntered(MouseEvent e){
     }     
     public void mouseExited(MouseEvent e){
     }
     public void mouseClicked(MouseEvent e){
     }
     /*mouseMoved(),mouseDragged()取得鼠标移动的每一个坐标,并调用repaint()方法*/ 
     public void mouseMoved(MouseEvent e){
               flag=1;
               x=e.getX();
               y=e.getY();
               repaint();
     }
     public void mouseDragged(MouseEvent e){
               flag=2;
               x=e.getX();
               y=e.getY();
               repaint();
     }
     public void update(Graphics g){
          g.setColor(this.getBackground());
          g.fillRect(0,0,getWidth(),getHeight());
          paint(g);
     }
     public void paint(Graphics g){
          g.setColor(Color.black);
          if (flag==1){
             g.drawString("鼠标坐标:("+x+","+y+")",10,50);
             g.drawLine(startx,starty,endx,endy);
          }
          if (flag==2){
             g.drawString("拖曳鼠标价坐标:("+x+","+y+")",10,50);
             g.drawLine(startx,starty,x,y);
          }
     }
     public static void main(String[] args){
          new MouseDemo3();
     }
}

swing 鼠标事件相关推荐

  1. java swing鼠标事件监听_java swing鼠标监听问题

    需要对一个JButton b添加一个监听事件达到创建一个自定义的Position(x,y)的对象: 监听类NewListen中需要用到鼠标在面板上点击取坐标值来完成创建一个Position(x,y)的 ...

  2. java swing 禁用鼠标事件_Java学习笔记:swing中树控件,设置树节点的图标,按钮美化,鼠标事件,禁止鼠标双击...

    树控件: JTree:声明树控件 声明树的节点: DefaultMutableTreeNode dd=new DefaultMutableTreeNode("传入树节点名称"); ...

  3. JAVA——鼠标事件(MouseEvent)MouseListener监听器DEMO

    基本概念 MouseEvent:所有组件都能发出鼠标事件,MouseEvent类负责捕获鼠标事件,可以通过为组件添加实现了MouseListener接口的监听器类来处理相应的鼠标事件. MouseLi ...

  4. 常用jquery鼠标事件和渐变动画效果

    2019独角兽企业重金招聘Python工程师标准>>> 鼠标事件是在用户移动鼠标光标或者使用任意鼠标键点击时触发的以下是具体事件的介绍: (1):click事件:click事件于用户 ...

  5. java 监听桌面鼠标事件,鼠标事件的监听和使用

    鼠标操作是图形操作系统最常用操作,用户使用鼠标单击,双击,右击,拖动等操作实现与软件的交互. 鼠标事件监听器 鼠标事件监听器由MouseListener接口和MouseMotionListener接口 ...

  6. java swing 删除事件_java swing清除事件队列

    是否可以以标准方式执行此操作? 这是场景. >开始在EDT中做一些昂贵的事情(EDT被阻止,直到昂贵的操作结束). >当EDT被阻止时,用户继续单击/拖动鼠标按钮.所有鼠标操作都记录在某处 ...

  7. java鼠标事件_Java 模拟鼠标事件

    导读热词 下面是编程之家 jb51.cc 通过网络收集整理的代码片段. 编程之家小编现在分享给大家,也给大家做个参考. @H_502_5@/** * Clicks in a given area of ...

  8. Java:在不同界面样式下JPopupMenu与鼠标事件mousePressed表现的结果不同!

    今天遇到一个郁闷的事儿: 在一个JFrame上放了一个JList元件,这个JList元件添加了鼠标事件: mouseReleased.mousePressed ... 其中,在mouseRelease ...

  9. java Swing 鼠标图标的改变及移入按钮改变

    java Swing 鼠标图标的改变 先创建一个Swing窗口 然后将要用的变量定义为全局变量,方便使用 //鼠标图标private Image image;private Toolkit tk;pr ...

  10. java编写程序实现键盘钢琴,运用键盘事件、鼠标事件

    java编写程序实现键盘钢琴,运用键盘事件.鼠标事件 界面     实现 MouseListener,MouseMotionListener,KeyListener接口,当鼠标进入不同按钮时,会播放不 ...

最新文章

  1. STL源码剖析学习七:stack和queue
  2. NLP炼丹笔记:Switch Transformers 朴实无华 大招秒杀
  3. 当数据库遇见FPGA:X-DB异构计算如何实现百万级TPS?
  4. 深度学习中常用的激活函数详解及对比分析(sigmoid)
  5. Uncaught SyntaxError: Unexpected token in body onload
  6. pythonwhile循环love_input和while循环——Python编程从入门到实践
  7. 原版98启动盘镜像.img_装机技巧系列(二):系统安装之Windows 10启动盘制作
  8. WPF中播放Flash动画
  9. SQL,C#查询Excel数据
  10. windows server 2012 usb redirection with remoteFX
  11. 「回血赠书」Python入门书单,新年全力扬帆
  12. 深入理解计算机系统(1)--hello world程序的生命周期
  13. 【转】前端开发中的MCRV模式
  14. TypeScript:函数进阶
  15. java利用openoffice转换doc、docx、txt、pptx、xlxs为PDF格式文件
  16. 西门子S7-1200PLC脉冲控制伺服程序案例 此程序是关于西门子1200PLC以PTO脉冲方式控制伺服电机
  17. Go语言爱好者周刊:第 131 期 — 这道题你做对了吗?
  18. 安卓Android问卷调查系统app
  19. CGO 之 Dll调用
  20. 动态内存分配算法:首次适应算法,循环首次适应算法,最坏适应算法,最佳适应算法实现

热门文章

  1. 微信与多闪之争背后,好友关系链到底是如何窃取的?
  2. (转)在 Linux 平台中调试 C/C++ 内存泄漏方法
  3. java simon_Java Simon
  4. 语义分割论文:Fully Convolutional Networks for Semantic Segmentation (CVPR2015)
  5. linux设备模型五(device和device_driver)
  6. [IMX6Q]fastboot下载u-boot.bin失败提示太大原因
  7. css3效果隔两秒旋转然后停两秒再继续旋转,无限循环
  8. 对51job网页招聘信息的简单爬取
  9. wind10 使用Hyper-V安装centos7遇到的问题及解决方案
  10. [剑指-Offer] 0. 《剑指-Offer》面试题题解汇总