鼠标事件
来自CloudWiki
鼠标事件
任何时候移动、单击、按下或释放鼠标,都会生成鼠标事件MouseEvent。 MouseEvent事件类中,有四个最常用的方法:
- int getx():返回事件发生时,鼠标所在坐标点的x坐标
- int gety():返回事件发生时,鼠标所在坐标点的y坐标
- int getclickCount():返回事件发生时,鼠标的点击次数
- int getButton():返回事件发生时,哪个鼠标按键更改了状态
当鼠标在同一点被按下并释放(单击)时,mouseClicked()方法将被调用;当鼠标进入一个组件时,mouseEntered()方法将被调用。当鼠标离开组件时,mouseExited()方法将被调用:当鼠标被按下和释放时,相应的mousePressed()方法和mouseReleased()方法将被调用。当鼠标被拖动时,mouseDragged()方法将被连续调用;当鼠标被移动时,mouseNloved()方法将被连续调用。
MouseEvent的特有方法:int getButton()用于获取鼠标按键信息;int getX()、int getY()用于获取鼠标坐标位置。按键常量定义BUTTON1、BUTTON2、BUTTON3分别代表鼠标的三个按键(有的鼠标只有两个按键)。
鼠标事件监听器
鼠标事件对应两个接口:MouseListener和MouseMotionListener。
MouseListener共有五个方法,主要用来实现鼠标的单击事件(用于处理组件上的鼠标按下、释放、单击、进入和离开事件);接口MouseListener中的方法为:
public void mousePressed(MouseEvent e)处理按下鼠标左键 public void mouseClicked(MouseEvent e)处理鼠标单击 public void mouseReleased(MouseEvent e)处理鼠标按键释放 public void mouseEntered(MouseEvent e)处理鼠标进入当前窗口 public void mouseExited(MouseEvent e)处理鼠标离开当前窗口
MouseMotionListener有两个方法。
public void mouseDragged(MouseEvent e)处理鼠标拖动 public void mouseMoved(MouseEvent e)处理鼠标移动
对应上述接口,对应的注册监听器的方法是addMouseListener()和addMouseMotionListener()。
案例精选:改变窗口颜色(三)
构建窗体布局
package main; import java.awt.Color; import java.awt.FlowLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import javax.swing.*; public class BackGroundColor3 extends JFrame { private JButton button; final JPanel buttonPanel; public BackGroundColor3(){ super("改变颜色"); button = new JButton("改变颜色"); buttonPanel = new JPanel(); buttonPanel.setLayout(new FlowLayout(FlowLayout.CENTER)); buttonPanel.add(button); add(buttonPanel); setSize(300,200); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setVisible(true); } public static void main(String[] args) { BackGroundColor3 bg = new BackGroundColor3(); } }
分析窗体事件
MouseEvent
编写事件监听器
private class ColorMouse implements MouseListener{ public ColorMouse(){} @Override public void mousePressed(MouseEvent e){} public void mouseClicked(MouseEvent e){ int t=e.getClickCount(); switch(t){ case 1:buttonPanel.setBackground(Color.RED);break; case 2:buttonPanel.setBackground(Color.GREEN);break; case 3:buttonPanel.setBackground(Color.BLUE);break; } } public void mouseReleased(MouseEvent e){} public void mouseEntered(MouseEvent e){} public void mouseExited(MouseEvent e){} }
绑定事件监听器
button.addMouseListener(new ColorMouse());
知识点提炼
- 事件处理模型由产生事件的对象(事件源)和事件对象(事件接口)以及监听者(事件监听器)对象组成。
- 每个事件类都有一个监听者接口与之相对应,而事件类中的每个具体事件类型都有一个具体的抽象方法与之相对应,当具体事件发生时,这个事件将被封装成一个事件类的对象作为实际参数传递给与之对应的具体方法,由这个具体方法负责响应并处理发生的事件。
- 一个对象如果要成为一个源对象的事件处理器,需要满足两个条件:1)监听器对象必须是一个对应的事件处理接口的实例, 2)监听器对象必须通过源对象注册。
- 如果一个接口定义个唯一一个抽象方法,那么这个接口就成为函数式接口。对于函数式接口处理器而言,使用lambda表达式可以极大地简化事件处理代码。