在图形用户界面中,用户经常使用鼠标来进行选择、切换界面等操作,这些操作被定义为鼠标事件,曲中包括鼠标按下、鼠标松开、鼠标单击等。JDK 中提供了一个 MouseEvent 类用于表示鼠标类事件,几乎所有的组件都可以产生鼠标事件。处理鼠标事件时,首先需要通过实现 MouseListener 接口定义监听器(也可以通过继承适配器 MouseAdapter 类来实现),然后调用 addMouseListener()方法将监听器绑定到事件源对象。

    接下来通过一个案例来学习如何监听鼠标事件,如下所示。

    1. import java.awt.Button;
    2. import java.awt.FlowLayout;
    3. import java.awt.Frame;
    4. import java.awt.event.MouseEvent;
    5. import java.awt.event.MouseListener;
    6. public class example12 {
    7. public static void main(String[] args) {
    8. final Frame frame = new Frame();
    9. //为窗口设置布局
    10. frame.setLayout(new FlowLayout());
    11. frame.setSize(300, 200);
    12. frame.setLocation(300, 200);
    13. frame.isVisible();
    14. //创建按钮对象
    15. Button btn = new Button();
    16. //在窗口添加按钮组件
    17. frame.add(btn);
    18. //为按钮注册鼠标事件监听器
    19. btn.addMouseListener(new MouseListener() {
    20. public void mouseReleased(MouseEvent e) {
    21. System.out.println("mouseReleased---鼠标放开事件");
    22. }
    23. public void mousePressed(MouseEvent e) {
    24. System.out.println("mousePressed---鼠标按下事件");
    25. }
    26. public void mouseExited(MouseEvent e) {
    27. System.out.println("mouseExited---鼠标移出按钮区域事件");
    28. }
    29. public void mouseEntered(MouseEvent e) {
    30. System.out.println("mouseEntered---鼠标加入按钮区事件");
    31. }
    32. public void mouseClicked(MouseEvent e) {
    33. System.out.println("mouseClicked---鼠标完成点击事件");
    34. }
    35. });
    36. }
    37. }

    运行程序,生成的窗口,如下所示。
    QQ截图20200620110001.png
    用鼠标对窗口上的按钮进行操作,把鼠标移进按钮区域。单击按钮然后释放,再移出按钮区域,控制台的输出如下。
    QQ截图20200620110021.png
    从上图可以看出,当鼠标对按钮做出了相应的动作之后,监听器获取到相应的事件对象,从而打印出动作所对应的事件名称。

    鼠标的操作分为左键单击双击和右键单击双击,而且还有滚轮,上面只给这些事件的处理,能满足需求吗?答案是肯定的,MouseEvent 类中定义了很多常量来标识鼠标动作。如下面的代码所示。

    1. public void mouseClicked(MouseEvent e) {
    2. if (e.getButton() == MouseEvent.BUTTON1) {
    3. System.out.println("鼠标左击事件");
    4. }
    5. if (e.getButton() == MouseEvent.BUTTON3) {
    6. System.out.println("鼠标右击事件");
    7. }
    8. if (e.getButton() == MouseEvent.BUTTON2) {
    9. System.out.println("鼠标中击事件");
    10. }
    11. }

    从上面的代码可以看出,MouseEvent 类中针对鼠标的按键都定义了对应的常量,可以通过 MouseEvent 对象的 getButton()方法获取被操作案按键的常量键值,从而判断是哪个按键的操作。另外,鼠标的单击次数也可以通过 MouseEvent 对象的 getClickCount()方法得到。因此,在鼠标事件中,可以根据不同的操作,做出相应的处理。

    鼠标事件还有很多,这里就不做详细介绍了。