JAVA委托事件处理机制

时间:2023-02-25 11:10:45

1)事件:用户对程序的某一种功能性操作。

Java中的事件主要有两种:

1.组件类事件

componentEvent、ContainerEvent、WindowEvent、FocusEvent、PaintEvent、MouseEvent共六大类,

它们均是当组件的状态发生变化时产生。

2.动作类事件

ActionEvent、TextEvent、AdjustmentEvent、ItemEvent共四类。

它们均对应用户的某一种功能性操作动作。

Java中的事件类都包含在JDK的 Java.awt.event包中。

2)事件编程:

用户编程定义每个特定事件发生时程序应做出何种响应,并且这些响应代码会在对应的事件发生时由系统自动调用。

3)事件委托授权处理模型

JDK1.1以上版本实现了事件委托授权处理模型的机制。

① 事件源:产出事件的组件。

② 监听器:对组件所产生的事件作出具体响应的代吗,即事件产出与处理分别由两个不同类(它们可以分别放在不同的程序中)加以编程实现。

③ 事件处理机制:AWT组件自身不编程处理相应的事件,面是交由事件监听器(它可以是组件所在的容器类或另外的Java程序类,只要它们实现了相关的事件监听器接口即可)处理(事件授权处理模型)。

④ 事件处理的包:java.awt.event包,它提供AWT事件所需的类和接口

ActionEvent类对应ActionListener接口;

MouseEvent类对应MouseMotionListener接口和MouseListener接口;

WindonEvent类对应WindonListener接口---即发生了XXXEvent类型的事件,那么处理该事件的接口为XXXListener);它们的父类为EventObject类。

各个事件类的说明:

EventObject:所有事件类的超类

最重要的方法-- getSource(),返回产生某事件的对象

AWTEvent:所有AWT事件类的超类

最重要的方法-- getID(),返回某事件的ID号,事件的ID是一个整数,它指定事件的类型,例如按钮事件或鼠标点击事件

ActionEvent:激活组件时发生的事件

AdjustmentEvent:调节可调整的组件(如移动滚动条)时发生的事件

ComponentEvent:操纵某组件时发生的一个高层事件

ContainerEvent:向容器添加或删除组件时发生

InputEvent:由某输入设备产生的一个高层事件

ItemEvent:从选择项,复选框或列表中选择时发生

KeyEvent:操作键盘时发生

MouseEvent:操作鼠标时发生

PaintEvent:描绘组件时发生的一个事件

TextEvent:更改文本时发生

WindowEvent:操作窗口时发生的事件,如最大化或最小化某一窗口。

4)事件编程的基本原则:

事件处理的类代码要对某一类事件加以处理,则应实现它们所对应的接口,并且给出该接口中定义的全部事件响应函数的功能实现(重写其函数体);然后在创建组件时注册该事件的监听器(响应者)。

5)事件注册:

事件源通过对特定的事件进行注册,以指定该事件的监听器(响应者)是谁。

6)事件注册函数:

函数名由“add + 事件类型对应的监听器接口名称”组成;函数参数为监听器对象(实现事件响应的类的对象,如容器组件自身响应该事件,则监听器对象应用this代表)。

public void add< listenerType >(< listenerType > ListenerObj)

{

}

7)事件编程步骤:

①实现某一事件的监听器接口(定义事件处理类并实现监听器接口)。

②在事件处理类中重写(实现)其事件处理的函数体。

③在创建AWT组件时注册事件处理代码以指定该事件的监听器(响应者)是谁。

?/P>

public class ButtonActionEvent extends Applet

implements ActionListener,MouseMotionListener,MouseListener

{

public void init()

{     this.addActionListener(this);

this.addMouserMotionListener(this);

this.addMouseListener(this);

}

public void actionPerFormed(ActionEvent event)

{

if(event.getSource()==SourceObject)

{  //利用事件响应函数中的事件对象获取事件产生时的相关信息

}

else if(event.getActionCommand()=="组件的标签名字符文字"

{

}

}

public void mouseDragged(MouseEvent event)

{ //利用事件响应函数中的事件对象获取事件产生时的相关信息

int x=event.getX();

int y=event.getY();

}

public void mouseMove(MouseEvent event)

{

}

}

,从而响应用户对该组件的操作。本类实现某类事件对应的监听器接口,并实现对应的响应函数),也可屏蔽它(将其事件响应函数体置空)。

(2)事件响应类(监听器)可以实现多个监听器接口,以响应多组不同事件,从而可使同一个组件可以注册多种事件。

(3)利用事件响应函数中的事件对象获取事件产生时的相关信息(event.getSource())事件源对象,event.getX(), event.getY(),事件产生时的鼠标位置,event.getActionCommand(),获取组件的字符串名称。

9)各个事件监听器接口

ActionListener

使用它的常见AWT类 Button, List, TextField

接口定义的方法

public void actionPerformed(ActionEvent e)

添加到组件的方法

Obj.addActionListener(ActionListener l)

AdjustmentListner

使用它的常见AWT类 ScrollBar

接口定义的方法

public void adjustmentValueChanged(AdjustmentEvent e)

添加到组件的方法

Obj.addAdjustmentListener(AdjustmentListener l)

ComponentListener

使用它的常见AWT类

接口定义的方法

public void componentResized(ComponentEvent e)

public void componentMoved(ComponentEvent e)

public void componentShown(ComponentEvent e)

public void componentHidden(ComponentEvent e)

添加到组件的方法

Obj.addComponentListener(ComponentListener l)

ContainerListener

使用它的常见AWT类

接口定义的方法

public void componentAdded(ContainerEvent e)

public void componentRemoved(ContainerEvent e)

添加到组件的方法

ItemListener

使用它的常见AWT类 Checkbox, Choice, List

接口定义的方法

public void itemStateChanged(ItemEvent e)

添加到组件的方法

FocusListener

使用它的常见AWT类

接口定义的方法

public void focusGained(FocusEvent e)

public void focusLost(FocusEvent e)

添加到组件的方法

KeyListener

使用它的常见AWT类

接口定义的方法

public void keyTyped(KeyEvent e)

public void keyPressed(KeyEvent e)public void keyReleased(KeyEvent e)

添加到组件的方法

MouseListener

使用它的常见AWT类

接口定义的方法

public void mouseClicked(MouseEvent e)

public void mousePressed(MouseEvent e)

public void mouseReleased(MouseEvent e)

public void mouseEntered(MouseEvent e)

public void mouseExited(MouseEvent e)

添加到组件的方法

MouseMotionListener

使用它的常见AWT类

接口定义的方法

public void mouseDragged(MouseEvent e)

public void mouseMoved(MouseEvent e)

添加到组件的方法

TextListener

使用它的常见AWT类 TextField, TextArea

接口定义的方法

public void textValueChanged(TextEvent e)

添加到组件的方法

WindowListener

使用它的常见AWT类

接口定义的方法

public void windowOpened(WindowEvent e)

public void windowClosing(WindowEvent e)

public void windowClosed(WindowEvent e)

public void windowIconified(WindowEvent e)

public void windowDeiconified(WindowEvent e)

public void windowActivated(WindowEvent e)

public void windowDeactivated(WindowEvent e)

添加到组件的方法

10)事件适配器

由于事件监听器接口是Abstract类型,意谓着实现该接口的类应全部实现其各个成员函数,但实际应用中可能只需处理某些事件响应代码;此时再采用实现事件监听器接口可能会导致编程复杂。JDK中提供事件适配器方式来实现事件编程。

①每一种监听器接口有相应的适配器类,程序员只需让事件处理类从某一适配器类派出而不采用实现监听器接口的方式,这样仅需重写用户感兴趣的相应函数体代码。各个事件监听器接口相相应的事件适配器类如下:

WindowListener ------WindowAdapter

MouseListener -----MouseAdapter

MouseMotionListener-----MouseMotionAdapter。

②在事件注册时,应将监听器设为适配器的派生类(子类)对象,该适配器类中事件响应函数将被执行。

JAVA委托事件处理机制的更多相关文章

  1. Java Swing事件处理机制

    Java Swing的事件处理机制 Swing GUI启动后,Java虚拟机就启动三个线程,分别为主线程,事件派发线程(也是事件处理线程)和系统工具包线程. 主线程 :负责创建并显示该程序的初始界面: ...

  2. Java事件处理机制(深入理解)

    本文是关于Java事件处理机制的梳理,以及有重点的介绍一些注意点,至于基础的概念啥的不多赘述. 一.Java事件处理机制初步介绍(看图理解) 根据下图,结合生活实际,可以得知监护人可以有多个,坏人对小 ...

  3. java 事件处理机制:按下上下左右键控制小球的运动

    /** * 加深对事件处理机制的理解 * 通过上下左右键来控制一个小球的位置 */package com.test3;import java.awt.*;import javax.swing.*;im ...

  4. core java 8~9&lpar;GUI &amp&semi; AWT事件处理机制&rpar;

    MODULE 8 GUIs--------------------------------GUI中的包: java.awt.*; javax.swing.*; java.awt.event.*; 要求 ...

  5. C&num;委托及事件处理机制浅析

    事件可以理解为某个对象所发出的消息,以通知特定动作(行为)的发生或状态的改变.行为的发生可能是来自用户交互,如鼠标点击:也可能源自其它的程序逻辑.在这里,触发事件的对象被称为事件(消息)发出者(sen ...

  6. 从零开始理解JAVA事件处理机制(1)

    “事件”这个词已经被滥用了.正因为“事件”的被滥用,很多人在用到事件的时候不求甚解,依样画葫芦,导致学习工作了很多年,还是不清楚什么是事件处理器.什么是事件持有者.所以,如果你对于Event这个词还是 ...

  7. 从零开始理解JAVA事件处理机制(2)

    第一节中的示例过于简单<从零开始理解JAVA事件处理机制(1)>,简单到让大家觉得这样的代码简直毫无用处.但是没办法,我们要继续写这毫无用处的代码,然后引出下一阶段真正有益的代码. 一:事 ...

  8. 从零开始理解JAVA事件处理机制(3)

    我们连续写了两小节的教师-学生的例子,必然觉得无聊死了,这样的例子我们就是玩上100遍,还是不知道该怎么写真实的代码.那从本节开始,我们开始往真实代码上面去靠拢. 事件最容易理解的例子是鼠标事件:我们 ...

  9. java事件处理机制

    java中的事件机制的参与者有3种角色:   1.event object:就是事件产生时具体的"事件",用于listener的相应的方法之中,作为参数,一般存在与listerne ...

随机推荐

  1. 【leetcode】Isomorphic Strings

    题目简述: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the ...

  2. CentOS 6&period;5&lowbar;X64下安装MongoDB数据库

    1.下载MongoDB 官网下载地址:https://www.mongodb.org/downloads 具体链接:https://fastdl.mongodb.org/linux/mongodb-l ...

  3. xcode 最近打开文件列表显示为空或不显示最近打开的项目或(no recent projects&rpar;解决办法

    如果使用的是10.10 系统,打开系统设置-->进入通用-->在最下面的"最近使用的项目"中将0改为你可以接受的选项 如果不是10.10,那么就从系统偏好设置---&g ...

  4. 『重构--改善既有代码的设计』读书笔记---Duplicate Observed Data

    当MVC出现的时候,极大的推动了Model与View分离的潮流.然而对于一些已存在的老系统或者没有维护好的系统,你都会看到当前存在大把的巨大类----将Model,View,Controller都写在 ...

  5. GC算法之串行并行并发

    串行收集器: 用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高.但是,也无法使用多处理器的优势,所以此收集器适合单处理器机器.当然,此收集器也可以用在小数据量(100M左右)情况下的多 ...

  6. C&num; 中参数验证方式

    C# 中参数验证方式 一般在写方法的时候,第一步就是进行参数验证,这也体现了编码者的细心和缜密,但是在很多时候这个过程很枯燥和乏味,比如在拿到一个API设计文档的时候,通常会规定类型参数是否允许为空, ...

  7. jmeter对http协议中post请求接口测试

     现在有很多的工具用于工作上的使用,在jmeter的开源工具当中的,提供了一个可以对http协议的post的请求上接口测试,用于实现接口测试的自动化测试,当然也可以使用自己写的工具. 进行打开jmet ...

  8. java字符串,包,数组及空心正方形,菱形的实例

    一.数组:相同类型的多个对像引用类型:所有的类,接口,数组,int[] ints(变量名) = new int[3]new:指的是在内存空间重新开辟一块区域 String s1 = "abc ...

  9. ThinkSNS积分商城系统功能详解!

    积分商城含PC端.Android APP.iOS APP:在ThinkSNS PC端首页导航栏点击"拓展功能",然后选择"积分商城"进行体验:APP端则是在&q ...

  10. QT使用websocket进行长连接

    一般我们用的最多的就是http请求,但是频繁的请求可能对服务造成的压力很大,所以今天谈谈websocket长连接,一句话:简单 1.什么是长连接? A:一次请求连接,终身使用,就可以长久的保持信息的交 ...