目录 | contents
一、相关接口
与鼠标相关的顶层接口有两个:MouseListener和MouseMotionListener。
//MouseListener接口内的方法:
public void mousePressed (MouseEvent event )
public void mouseClicked (MouseEvent event )
public void mouseReleased (MouseEvent event )
public void mouseEntered (MouseEvent event )
public void mouseExited (MouseEvent event )
方法参数MouseEvent中封装了鼠标事件的相关信息(比如鼠标点击的x和y的坐标),其基类InputEvent中定义了一 些方法与常量。
//MouseMotionListener接口内的方法:
public void mouseDragged( MouseEvent event )
public void mouseMoved( MouseEvent event )
其子接口MouseInputListener“组合”了这两个接口的所有方法,另还有一个MouseWheelListener接口与鼠标中的滚轮滚动相关。
二、设置鼠标动态响应
以实时检测鼠标行为(显示在左下角)的程序为例
1、写出一个鼠标监听器类
该类需要接上MouseListener接口和MouseMotionListener接口,并且全部重写MouseListener接口内的5个方法和MouseMotionListener接口内的2个方法(上面已经列出)。每一个方法对应当鼠标发生该事件时对应的响应,比如:
public void mouseMoved(MouseEvent event) {
//当鼠标移动时会运行此处代码
}
注意是总共7个方法去拿不重写,所以对于不需要的鼠标响应,也需要重写(或者考虑使用鼠标事件适配器),把代码内容空着就好。
public void mouseDragged(MouseEvent event) {
//当鼠标拖动时会运行此处代码
}
例:
private class MouseHandler implements MouseListener, MouseMotionListener {
// MouseListener event 响应
// handle event when mouse released immediately after press
public void mouseClicked(MouseEvent event) {
statusBar.setText(String.format("Clicked at [%d, %d]",
event.getX(), event.getY()));
}
// handle event when mouse pressed
public void mousePressed(MouseEvent event) {
statusBar.setText(String.format("Pressed at [%d, %d]",
event.getX(), event.getY()));
}
// handle event when mouse released
public void mouseReleased(MouseEvent event) {
statusBar.setText(String.format("Released at [%d, %d]",
event.getX(), event.getY()));
}
// handle event when mouse enters area
public void mouseEntered(MouseEvent event) {
statusBar.setText(String.format("Mouse entered at [%d, %d]",
event.getX(), event.getY()));
mousePanel.setBackground(Color.GREEN);
}
// handle event when mouse exits area
public void mouseExited(MouseEvent event) {
statusBar.setText("Mouse outside JPanel");
mousePanel.setBackground(Color.WHITE);
}
// MouseMotionListener event 响应
// handle event when user drags mouse with button pressed
public void mouseDragged(MouseEvent event) {
statusBar.setText(String.format("Dragged at [%d, %d]",
event.getX(), event.getY()));
}
// handle event when user moves mouse
public void mouseMoved(MouseEvent event) {
statusBar.setText(String.format("Moved at [%d, %d]",
event.getX(), event.getY()));
}
}
2、创建此鼠标监听器类的一个对象
直接new一个刚写好的MouseHandler对象
//实例化已经写好的鼠标事件监听器的对象
MouseHandler handler = new MouseHandler();
3、将鼠标监听器对象付托在事件源组件上
我这里是将鼠标的事件发生设定在一个mousePanel上(事件源为JPanel组件),使用 addXXListener方法 给它的两个监听器加上对应的监听器对象:
mousePanel.addMouseListener(handler); //加入监听器
mousePanel.addMouseMotionListener(handler); //加入监听器
完整代码有点点长就不贴喇~
三、MouseEvent类的方法
上面重写的每一个方法的传入参数都是MouseEvent类的,它继承了InputEvent类,其本身和基类都封装了不少方法与常量,我们可以直接使用MouseEvent类调用完成以下实用功能:
1、检测鼠标按键
一般鼠标都有三个按键,我们分别称之左、中、右按键。
使用 isMetaDown和isAltDown方法 来检测鼠标按键是对应哪个。
public boolean isMetaDown() //按下的是右按键,返回ture;否则返回false
public boolean isAltDown() //按下的是中间按键,返回ture;否则返回false
2、获取鼠标的位置
使用 getX、getY或者getPoint方法
public int getX() //获取鼠标的x坐标
public int getY() //获取鼠标的y坐标
public Point getPoint() // 获取鼠标位置(x, y)
3、获取鼠标连续点击次数
使用 getClickedCount方法 ,这个方法一般在检测双击、三击中很常用到。
public int getClickCount() //返回连续点击的次数
end
欢迎关注个人公众号“ 鸡翅编程 ”,这里是认真且乖巧的码农一枚。
---- 做最乖巧的博客er,做最扎实的程序员 ----
旨在用心写好每一篇文章,平常会把笔记汇总成推送更新~