Java鼠标事件MouseEvent

本文介绍如何在Java中通过实现MouseListener和MouseMotionListener接口处理鼠标事件,并演示了一个简单的程序,该程序在面板上显示动态信息并允许用户通过鼠标操作移动此信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

当在一个组件上按下,释放,点击,移动或拖动鼠标时就会产生鼠标事件。MouseEvent对象捕获这个事件.
     MouseEvent类继承InputEvent类,所以MouseEvent对象可以使用InputEvent类中定义的方法。
     java.awt.point类表示一个点,该类包含两个用来表示坐标的公共变量x和y。
     为了创建一个point,可以使用Point(int x,int y)
InputEvent类中的方法:
     getWhen():  long                                      返回事件发生的时间
     isAltDown(): boolean                                 如果按下alt返回true
     isControlDown():  boolean                          如果按下ctrl返回true
     isShiftDown():  boolean                              如果按下shift返回true
MouseEvent类中的方法:
     getButton():  int                                         表明是否点击鼠标按钮
     getClickCount():  int                                    返回相关事件的鼠标点击数
     getPoint():   java.awt.point                         返回包含X坐标和Y坐标的point对象
     getX():int                                                返回鼠标点的X
     getY():   int                                               返回鼠标点的Y

java提供了两个处理鼠标事件的监听器接口MouseListener和MouseMotionListener。
实现MouseListener接口可以监听鼠标的按下,释放,输入,退出和点击动作。
实现MouseMotionListener接口可以监听拖动鼠标和鼠标的移动动作。

mousePressed(e: MouseEvent): void                                                     在源组件上按下鼠标按钮
mouseReleased(e: MouseEvent):  void                                                   释放源组件上的鼠标按钮
mouseClicked(e: MouseEvent):  void                                                       在源组件上点击鼠标按钮
mouseEntered(e: MouseEvent):  void                                                      在鼠标进入源组件之后被调用
mouseExited(e: MouseEvent):  void                                                       在鼠标退出源组件之后被调用
      
mouseDragged(e: MouseEvent):  void                         按下按钮移动鼠标按钮之后被调用
mouseMoved(e: MouseEvent):  void                            不按住按钮移动鼠标之后被调用

实现一个程序,在面板中显示一条信息,可以用鼠标移动这条信息,信息会随着鼠标的移动而移动,信息总是显示在指针处。

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class MoveMessageDemo extends JFrame {
        public MoveMessageDemo(){
              MovableMessagePanel p = new MovableMessagePanel("Welcome to java" );
              setLayout( new BorderLayout());
              add(p);
              
       }
       
        public static void main(String[] args)
       {
              MoveMessageDemo frame = new MoveMessageDemo();
              frame.setTitle( "MoveMessageDemo");
              frame.setSize(200,100);
              frame.setLocationRelativeTo( null);
              frame.setDefaultCloseOperation(JFrame. EXIT_ON_CLOSE);
              frame.setVisible( true);
       }
       
        static class MovableMessagePanel extends JPanel{
               private String message = "Welcome to java" ;
               private int x = 20;
               private int y = 20;
              
               public MovableMessagePanel(String s){
                      message = s;
                     addMouseMotionListener( new MouseMotionAdapter(){
                            public void mouseDragged(MouseEvent e){
                                   x = e.getX();
                                   y = e.getY();
                                  repaint();
                           }
                     });
              }
              
               protected void paintComponent(Graphics g){
                      super.paintComponent(g);
                     g.drawString( message, x, y);
              }
              
       }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值