这篇文章对 MouseEvent 想说的主要是关于鼠标右键弹出菜单的一些体会

关于MouseEvent的一些信息
事件名称:MouseEvent
事件监听接口:MouseListener
需要注意的是,这个接口有五个方法,分别响应
1.按下
2.释放
3.单击(按下后释放)
4.进入(控件区域)
5.离开(控件区域)
这五个动作,五个方法分别是:

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);//发生单击事件时被触

另外,与其相似的还有一个抽象类MouseAdapter类,因为MouseListener里面有这么些方法,而这些方法不一定都是我们所需要的,所以引入MouseAdapter抽象类(是类,不是接口,所以在创建监听者时,用的是extends关键字),里面有系统写好的方法(这些方法没有方法体,就是空方法),只用重写需要的方法就行了。

常用方法:

方法名称

说明

getSource()

用来获得触发组件,返还Object对象

getButton()

获取按下,释放,单击的 int 值

getClickCount()

获取单击按键的次数

如果要知道鼠标的操作(左键,滚轮,右键),可以通过静态常量判断由 getButton() 方法返回的 int 型值代表的键来获取:

静态常量

常量值

代表的键

BUTTON1

1

鼠标左键

BUTTON2

2

鼠标滚轮

BUTTON3

3

鼠标右键

对于右键弹出菜单的实现,MouseEvent里有这么一个方法,isPopupTrigger(),它的原型是这样的:

public boolean ispopuptrigger()

它返回此鼠标事件是否为该平台(比如windows平台)的弹出菜单触发事件。说简单点就是用来判断是否应该弹出右键菜单。
这个函数的存在,是由于不同的平台弹出菜单的方式往往不同,但是又为了实现它的跨平台性,所以干脆不管平台是什么方式弹出,只判断是否是是弹出动作。

下面尝试实现右键单击弹出菜单:

需要导入的类:

import java.awt.event.MouseEvent;  //鼠标事件
import java.awt.event.MouseListener;
import javax.swing.JPopupMenu;  //弹出式菜单
import javax.swing.JMenuItem;  //这是 菜单项类

基本步骤
1.创建一个弹出式菜单,并加入一个菜单项

JPopupMenu jpopupmenu1 = new JPopupMenu();   //弹出式菜单
JMenuItem jmenuitem1 = new JMenuItem("菜单");  //菜单项
jpopupmenu1.add(jmenuitem1);   //弹出式菜单添加一个菜单项

2.创建鼠标监听者,实现MouseListener接口,并重写里面的五个类。

class mouselistener implements MouseListener
{
	JPopupMenu jpopupmenu2;  //一个弹出式菜单对象
	mouselistener(JPopupMenu jpopupmenu) //构造方法,将弹出式菜单传进来
	{
		jpopupmenu2 = jpopupmenu;
	}
	//一自己写一个显示的方法
	public void display(MouseEvent e)
	{
		if(e.isPopupTrigger()) //判断是否是弹出菜单动作
		{
			jpopupmenu2.show(e.getComponent(), e.getX(),e.getY())
			//这是JPopupMenu类里的显示方法
			//第一个参数是事件源,后两个是要显示的弹出菜单的左上角坐标
			//MouseEvent中的三个方法,getComponent()是获取响应控件
			//getX(),e.getY()是获取鼠标横纵坐标
		}
	}
	//然后是重写五个方法,不过不用每个方法里都添加display方法,对于我使用的
	//win7系统(),isPopupTrigger()判断为true的是mouseReleased方法,所以
	//只需要在mouseReleased方法添加display就好了,其他四个方法都为空。
	public void mouseReleased(MouseEvent e)
	{
		this.display(e);
	}
	public void mousePressed(MouseEvent e){}
	public void mouseExited(MouseEvent e){}
	public void mouseEntered(MouseEvent e){}
	public void mouseClicked(MouseEvent e){}
}

4.由于是在窗口内弹出,让JFrame类的窗口对象添加鼠标监听者

JFrame jframe = new JFrame("弹出式菜单");//窗口
jframe.addMouseListener(new mouselistener(jpopupmenu1));  //是主窗口响应鼠标事件

下面是完整的代码:

public class view
{
	public static void main(String[] args) 
	{
		JFrame jframe = new JFrame("弹出式菜单");//窗口
		jframe.setBounds(250, 300, 300, 250);
		
		JPopupMenu jpopupmenu1 = new JPopupMenu();   //弹出式菜单
		
		JMenuItem jmenuitem1 = new JMenuItem("菜单");
		jpopupmenu1.add(jmenuitem1);   //弹出式菜单添加一个菜单项
		
		class mouselistener implements MouseListener
		{
			JPopupMenu jpopupmenu2;  //一个弹出式菜单对象
			mouselistener(JPopupMenu jpopupmenu)   //构造函数
			{
				jpopupmenu2 = jpopupmenu;
			}
			//自己写的一个显示的方法
			public void display(MouseEvent e)
			{
				if(e.isPopupTrigger())
				{
					jpopupmenu2.show(e.getComponent(), e.getX(),e.getY());
				}
			}
			public void mouseReleased(MouseEvent e)
			{
				this.display(e);
			}
			public void mousePressed(MouseEvent e){}
			public void mouseExited(MouseEvent e){}
			public void mouseEntered(MouseEvent e){}
			public void mouseClicked(MouseEvent e){}
		}
		
		jframe.addMouseListener(new mouselistener(jpopupmenu1));  //是主窗口响应鼠标事件
		
		
		jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭时操作
		jframe.setVisible(true);   //设置可见
	}
}

最后的弹出式菜单运行结果:

java右键菜单swing java鼠标右键点击事件_sed