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

基本概念

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

MouseListener:处理鼠标事件的类要么实现此接口(及其包含的所有方法),要么扩展抽象类 MouseAdapter(仅重写所需的方法)。 然后使用组件的 addMouseListener 方法将从该类所创建的侦听器对象向该组件注册。当按下、释放或单击(按下并释放)鼠标时会生成鼠标事件。鼠标光标进入或离开组件时也会生成鼠标事件。发生鼠标事件时,将调用该侦听器对象中的相应方法,并将 MouseEvent 传递给该方法。

MouseListener接口共有5个抽象方法,分别在光标移入或移出组件时、鼠标按键被按下或释放时和发生单击事件时被触发。所谓单击事件,就是按键被按下并释放。

public interface MouseListener extends EventListener{
 
    public void mouseReleased(MouseEvent e);//鼠标按键被释放是被触发
 
    public void mousePressed(MouseEvent e);//鼠标按键被按下时被触发
 
    public void mouseExited(MouseEvent e);//光标移除组件时被触发
 
    public void mouseEntered(MouseEvent e);//光标移入组件时被触发
 
    public void mouseClicked(MouseEvent e);//发生单击事件时被触发
 
}

源代码 

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class GUIDEMO {

	public static void main(String[] args) {
		// TODO 自动生成的方法存根
		EventQueue.invokeLater(() ->
        {
           JFrame frame = new MyFrame();
           frame.setTitle("DrawTest");
           frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
           frame.setVisible(true);
        });
		System.out.println("Hello World");
	}
	
	public void print(Object obj) {
		System.out.println(obj);
	}	
}

class MyFrame extends JFrame {
	private static final int DEFAULT_WIDTH = 400;
	private static final int DEFAULT_HEIGHT = 400;
	public MyFrame() {
		setSize(DEFAULT_WIDTH,DEFAULT_HEIGHT);
		setLocation(100,200);
		setLayout(new FlowLayout());
		JButton but=new JButton("DEMOButton");
		but.addActionListener(event-> {
			print("action");
			print(event);
		});
		but.addMouseListener(new MouseAdapter(){
			public void mouseEntered(MouseEvent e) {
				print("enter");
			}
			public void mouseExited(MouseEvent e) {
				print("exit");
			}
			public void mouseClicked(MouseEvent e) {
				print("click");
				print(e.toString());
				if(e.getClickCount()==1) {
					print("floatclick");
				}else if(e.getClickCount()==2){
					print("dobleclick");
				}else {
					print("otherclick");
				}
				if(e.getButton()==1) {
					print("leftclick");
				}else if(e.getButton()==2) {
					print("midclick");
				}else if(e.getButton()==3) {
					print("rightclick");
				}else {
					print("otherclick");
				}
			}
			
		});
		add(but);
	}
	public void print(Object obj) {
		System.out.println(obj);
	}
	public Dimension getPreferredSize() { return new Dimension(DEFAULT_WIDTH, DEFAULT_HEIGHT); }
}

运行结果

参考文章

https://blog.csdn.net/qq_36761831/article/details/81564119

https://blog.csdn.net/jisuanjiguoba/article/details/79817587

https://www.cnblogs.com/cyg-06/p/5954768.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starzkg

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值