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

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(, );
jf.setDefaultCloseOperation();
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(, ));
JButton jb2 = new JButton();
jb2.setBackground(Color.GREEN);
jf.add(jb2);
jb2.setPreferredSize(new Dimension(, )); 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 = ;// 控制变量,用于更新坐标 public DrawListener(Graphics g) {
this.g = g;
} //鼠标按下时的处理方法
public void mousePressed(MouseEvent e) {
// 记录第一次点击的位置;由对象e得到
if (f == ) {
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 = ; } } // 鼠标释放时的处理方法
public void mouseReleased(MouseEvent e) {
// 记录鼠标释放时的坐标
if (f == ) {
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 == ) {
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) { } }

ps:纯属一孔之见,欢迎指正。

Java中的事件监听机制的更多相关文章

  1. Java 中的事件监听机制

    看项目代码时遇到了好多事件监听机制相关的代码.现学习一下: java事件机制包含三个部分:事件.事件监听器.事件源. 1.事件:继承自java.util.EventObject类,开发人员自己定义. ...

  2. java Gui编程 事件监听机制

    1.     GUI编程引言 以前的学习当中,我们都使用的是命令交互方式: 例如:在DOS命令行中通过javac java命令启动程序. 软件的交互的方式:   1. 命令交互方式    图书管理系统 ...

  3. 简单剖析Node中的事件监听机制(一)

    使用js的class类简单的实现一个事件监听机制,不同于浏览器中的时间绑定与监听,类似于node中的时间监听,并且会在接下来的文章中去根据自己的理解去写一下Event模块中的原理. Node.js使用 ...

  4. Java界面编程—事件监听机制

    组件首先要先注册事件处理器,当用户单击组件.移动鼠标或者敲击键盘时都会产生事件(Event),一旦有时间发生,应用程序就会做出对该事件的响应,这些组件就是事件源(Event source). 接受.解 ...

  5. 请描述Java中的时间监听机制?

    1.时间监听涉及到三个组件:事件源.事件对象.事件监听器 2.当事件源上发生某个动作时,它会调用事件监听器的一个方法,并将事件对象穿进去,开发人员在监听器中通过事件对象,拿到事件源,从而对事件源进行操 ...

  6. 转:java中的事件监听是怎样实现随时监听的

    http://blog.csdn.net/qq369201191/article/details/51204006

  7. 4.JAVA之GUI编程事件监听机制

    事件监听机制的特点: 1.事件源 2.事件 3.监听器 4.事件处理 事件源:就是awt包或者swing包中的那些图形用户界面组件.(如:按钮) 事件:每一个事件源都有自己特点有的对应事件和共性事件. ...

  8. JAVA事件监听机制学习

    //事件监听机制 import java.awt.*; import java.awt.event.*; public class TestEvent { public static void mai ...

  9. Java swing(awt):事件监听机制的实现原理+简单示例

    (1)实现原理 事件监听机制的实现: 参考图:事件模型_ActionEvent 为了节省资源,系统无法对某个事件进行实时的监听.故实现的机制是当发生某个事件后,处理代码将被自动运行,类似钩子一般.(回 ...

随机推荐

  1. GO的初始简书(二)环境变量设置与说明

    安装GO后你应该做的一些事~ 将自己需要开发的项目加入环境变量中的gopath中 GOPATH其实就一个工作目录   -----正在开发的项目 1首先在本地新建目录 go_work 2 vi ~/.b ...

  2. linux下安装一款笔记软件(为知笔记)

    今天突然想在ubuntu上安装一款跨平台(windows.linux.android)的笔记软件来做日常记录.文章记录以及网页收藏.原先并没有使用过类似的软件,只是见身边的很多人在使用印象笔记来做记录 ...

  3. 探索Gallery和ImageSwitcher布局

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layo ...

  4. MySql学习笔记(一) —— 正则表达式的使用

    前面介绍利用一些关键字搭配相应的SQL语句进行数据库查找过滤,但随着过滤条件的复杂性的增加,where 子句本身的复杂性也会增加.这时我们就可以利用正则表达式来进行匹配查找. 1.基本字符匹配 ' o ...

  5. input输入框控制字数

    HTML: <input class = "remark" type = "text" maxlength = "500"> J ...

  6. javascript基础-正则表达式

    概述 正则表达式被用来检索.替换那些符合某个模式的文本 标准正则表达式语法 javascript对正则表达式的支持 替代写法 逆向环视 //需求:替换mpre.cnsuning.com为${pre}, ...

  7. javascript基础-闭包

    原理 函数里包含函数,即闭包. 包含函数的结果是,子函数会挟持父函数的活动对象.子函数在访问一个变量时,先读自身的活动对象,是否包含此变量,没有从父函数里找,还没有,去祖函数,层层回溯,直到windo ...

  8. c++概括

    c++到底是什么样的语言 在过去的几十年,计算机技术的发展令人吃惊,当前的笔记本电脑的计算速度和存储信息的能力超过了20世纪60年代的大型机.20世纪七十年代,C和Pascal语言引领人们进入结构化编 ...

  9. JVM-8.性能监控与故障处理工具

    一.JDK的命令行工具 1.jdk/bin下面有非常多工具:这些工具大多数是用Java实现(jdk/lib/tools.jar) 2.jps:类似于Linux中的ps,显示Hotspot虚拟机进程 3 ...

  10. 一天搞定CSS: CSS选择器优先级--08

    选择器优先级:是指代码的执行顺序 通俗的说,就是多个选择器同时对一个标签分别添加样式,那么这个标签显示那个选择器设置的样式 1.优先级规则 2.规则1和2说明 优先级相同,谁后谁优先 优先级不同,优先 ...