鼠标事件监听机制的三个方面:

1.事件源对象:
事件源对象就是能够产生动作的对象。在Java语言中所有的容器组件和元素组件都是事件监听中的事件源对象。Java中根据事件的动作来区分不同的事件源对象,动作发生在哪个组件上,那么该组件就是事件源对象
2.事件监听方法:
addMouseListener(MouseListener ml) ;该方法主要用来捕获鼠标的释放,按下,点击,进入和离开的动作;捕获到相应的动作后,交由事件处理类(实现MouseListener接口)进行处理。
addActionListener(ActionListener al);捕获类似按钮组件上的鼠标点击动作或者是类似输入框组件上的键盘回车动作;然后将动作以及相关信息交由事件处理类(实现ActionListener接口)的相应方法进行处理。
addMouseMotionListener(MouseMotionListener mml);捕获鼠标的移动和拖动动作;然后将动作以及相关信息交由事件处理类(实现MouseMotionListener 接口)的相应方法进行处理。
addKeyListener(KeyListener kl);捕获事件源对象上的键盘按键的按下、释放和敲击动作;然后将动作以及相关信息交由事件处理类(实现KeyListener 接口)的相应方法进行处理。
3.事件接口(事件处理类,也即实现了事件接口的类):
MouseListener 鼠标事件接口,有按下,释放,点击,进入和离开的事件处理方法
ActionListener 动作事件接口,有动作对应的事件处理方法
MouseMotionListener 鼠标移动事件接口,有移动和拖动的事件处理方法
KeyLisetener 键盘事件接口,有释放,按下和敲击的事件处理方法
了解了事件监听的这三个方面之后,我们要对组件添加事件的监听就很容易了。下面是一个小例子:
目标:创建一个简易的绘图板,可以实现按下相应的功能来达到不同的绘画目的。
分析:
1.首选需要一个画图板的简易界面,定义一个Draw类使用Java的Swing组件进行界面的初始化。
2.然后定义事件接口DrawListener类,让它实现以上的接口,重写接口中的方法,达到自己的目的。
3.在Draw中实例化DrawListener类的对象。
4.为Draw类中的组件添加事件监听方法,指定事件处理类为DrawListener。
代码实现:
Draw类
package com.cbs;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
/**
* Draw类,用于界面的初始化
*
* @author CBS
*
*/
public class Draw {
public static void main(String[] args) {
Draw t = new Draw();
t.showUI();
}
// 界面初始化方法
public void showUI() {
JFrame jf = new JFrame();
jf.setTitle("画图");
jf.setSize(700, 700);
jf.setDefaultCloseOperation(3);
jf.setLocationRelativeTo(null);
FlowLayout layout = new FlowLayout(FlowLayout.LEFT);
jf.setLayout(layout);
JButton drawLine = new JButton("画直线");
jf.add(drawLine);
JButton drawOval = new JButton("画椭圆");
jf.add(drawOval);
JButton drawArc = new JButton("画曲线");
jf.add(drawArc);
JButton drawPolygon = new JButton("三角形");
jf.add(drawPolygon);
JButton jb1 = new JButton();
jb1.setBackground(Color.RED);
jf.add(jb1);
jb1.setPreferredSize(new Dimension(30, 30));
JButton jb2 = new JButton();
jb2.setBackground(Color.GREEN);
jf.add(jb2);
jb2.setPreferredSize(new Dimension(30, 30));
jf.setVisible(true);
Graphics g = jf.getGraphics();// 获取当前的画笔
DrawListener dl = new DrawListener(g);// 实例化DrawListener类的对象
jf.addMouseListener(dl);// 为窗体添加鼠标事件监听方法
jf.addMouseMotionListener(dl);// 为窗体添加鼠标移动事件监听方法
// 为按钮添加动作监听
drawLine.addActionListener(dl);
drawOval.addActionListener(dl);
jb1.addActionListener(dl);
jb2.addActionListener(dl);
drawArc.addActionListener(dl);
drawPolygon.addActionListener(dl);
}
}
DrawListener类
package com.cbs;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
/**
* 事件处理类
*
* @author CBS
*
*/
public class DrawListener implements MouseListener, MouseMotionListener,
ActionListener {
private int x1, y1, x2, y2;// 记录两次鼠标的点击坐标
private Graphics g;// 从界面获取画布对象
private String str;// 记录当前按钮的信息,区分不同的按钮
private Color color;// 记录画笔的颜色信息
private int f = 1;// 控制变量,用于更新坐标
public DrawListener(Graphics g) {
this.g = g;
}
//鼠标按下时的处理方法
public void mousePressed(MouseEvent e) {
// 记录第一次点击的位置;由对象e得到
if (f == 1) {
x1 = e.getX();
y1 = e.getY();
}
}
//鼠标点击时的处理方法
public void mouseClicked(MouseEvent e) {
if ("三角形".equals(str)) {
System.out.println("sanjaioxing");
int x, y;
x = e.getX();
y = e.getY();
g.setColor(color);
g.drawLine(x, y, x1, y1);
g.drawLine(x2, y2, x, y);
f = 1;
}
}
// 鼠标释放时的处理方法
public void mouseReleased(MouseEvent e) {
// 记录鼠标释放时的坐标
if (f == 1) {
x2 = e.getX();
y2 = e.getY();
}
// 两个坐标的得到了,可以用于直线的绘制,调用画布对象g方法,在界面上面画出直线
if ("画直线".equals(str)) {
g.setColor(color);
g.drawLine(x1, y1, x2, y2);
}
if ("画椭圆".equals(str)) {
g.setColor(color);
g.drawOval(x1, y1, x2, y2);
}
if ("三角形".equals(str) && f == 1) {
g.setColor(color);
g.drawLine(x1, y1, x2, y2);
f++;
}
}
// 鼠标进入时的处理方法
public void mouseEntered(MouseEvent e) {
}
// 鼠标退出时的处理方法
public void mouseExited(MouseEvent e) {
}
public void actionPerformed(ActionEvent e) {
if ("".equals(e.getActionCommand())) {
JButton jb = (JButton) e.getSource();
color = jb.getBackground();
} else {
str = e.getActionCommand();
}
}
// 鼠标拖动时的处理方法
public void mouseDragged(MouseEvent e) {
if ("画曲线".equals(str)) {
int x, y;
x = e.getX();
y = e.getY();
g.setColor(color);
g.drawLine(x1, y1, x, y);
x1 = x;
y1 = y;
}
}
// 鼠标释放时的移动方法
public void mouseMoved(MouseEvent e) {
}
}
以上这篇详谈Java中的事件监听机制就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
# java监听机制
# Java Spring 事件监听详情解析
# Java基础学习之Swing事件监听
# java中接口和事件监听器的深入理解
# Java使用自定义注解实现为事件源绑定事件监听器操作示例
# Java事件监听机制讲解
# JAVA用户自定义事件监听实例代码
# JavaGUI事件监听机制超详细讲解
# 鼠标
# 按下
# 角形
# 相关信息
# 拖动
# 给大家
# 自己的
# 都是
# 鼠标点击
# 是一个
# 两次
# 很容易
# 希望能
# 或者是
# 重写
# 要对
# 可以实现
# 让它
# 这篇
# 这三个
相关文章:
建站主机助手选型指南:2025年热门推荐与高效部署技巧
南京网站制作费用,南京远驱官方网站?
如何在IIS中新建站点并配置端口与IP地址?
如何在云主机上快速搭建网站?
h5网站制作工具有哪些,h5页面制作工具有哪些?
建站中国必看指南:CMS建站系统+手机网站搭建核心技巧解析
已有域名如何快速搭建专属网站?
PHP正则匹配日期和时间(时间戳转换)的实例代码
武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
MySQL查询结果复制到新表的方法(更新、插入)
建站主机选虚拟主机还是云服务器更好?
如何通过wdcp面板快速创建网站?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何在Golang中处理模块冲突_解决依赖版本不兼容问题
制作公司内部网站有哪些,内网如何建网站?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
成都品牌网站制作公司,成都营业执照年报网上怎么办理?
如何解决ASP生成WAP建站中文乱码问题?
,巨量百应是干嘛的?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
魔方云NAT建站如何实现端口转发?
如何高效利用亚马逊云主机搭建企业网站?
建站之星安装失败:服务器环境不兼容?
如何通过虚拟主机空间快速建站?
孙琪峥织梦建站教程如何优化数据库安全?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
如何在自有机房高效搭建专业网站?
如何快速搭建高效WAP手机网站吸引移动用户?
官网自助建站系统:SEO优化+多语言支持,快速搭建专业网站
山东云建站价格为何差异显著?
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
,南京靠谱的征婚网站?
香港网站服务器数量如何影响SEO优化效果?
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
活动邀请函制作网站有哪些,活动邀请函文案?
如何快速搭建二级域名独立网站?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
如何实现建站之星域名转发设置?
如何在阿里云高效完成企业建站全流程?
如何用PHP工具快速搭建高效网站?
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
建站之星微信建站一键生成小程序+多端营销系统
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
ppt制作免费网站有哪些,ppt模板免费下载网站?
定制建站策划方案_专业建站与网站建设方案一站式指南
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
如何制作网站标识牌,动态网站如何制作(教程)?
*请认真填写需求信息,我们会在24小时内与您取得联系。