java的事件处理(java中事件处理)
华为云服务器特价优惠火热进行中! 2核2G2兆仅需 38 元;4核4G3兆仅需 79 元。购买时间越长越优惠!更多配置及优惠价格请咨询客服。
合作流程: |
今天给各位分享java的事件处理的知识,其中也会对java中事件处理进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
微信号:cloud7591如需了解更多,欢迎添加客服微信咨询。
复制微信号
本文目录一览:
简述java事件处理机制?
java事件处理机制你必须得明确以下几个概念:
核心:java采用的是事件源——事件监听器模型
1:事件(event):是指一个状态的改变,或者一个活动的发生。例如,简单常见的是单击一个按钮,或者输入一个按键都是一个事件。
2:事件源(event source):能够产生事件的对象称为事件源,如文本框,按钮,下拉列表等。
3:事件监听器(event listener):需要一个对象对事件源进行监听,以便对发生的颂坦事件做出处理,该对象就是事件监听器。事件源通过调用相应的方法将某个对象作为自己的监听器。无论应用程序还是小程序都采用这一机制。
例,对于按钮,注册监听器的方法是 addActionListener(监视器);:
4: 事件源获得监听器之后,相应的操作就会导致事件的发生,并通知监听器,监听器就会做出相应的处理。
5:处理事件消扰的接口:监听器负责处理事件源发生的事件。为了处理事件源发生的拿樱旦事件,监听器会自动调用一个方法来处理事件,该方法定义在相应事件的接口中。

浅析Java与C#的事件处理机制(二)
\在程序中可见事件源Model类显式地调用了接口中的modelChanged方法 实际是把事件状态对象e作为参数 传递给了监听者类中的modelChanged方法
适配类
适配类是Java事件模型中极其重要的一部分 在一些应用旁嫌场合 事件从源到监听者之间的传递要通过适配知察类来 转发 例如 当事件源发出一个事件 而有几个事件监听者对象都可接收该事件 但只有指定对象做出反应时 就要在事件源与事件监听者之间插入一个事件适配器类 由适配器类来指定事件应该是由哪些监听者来响应 适配类成为了事件监听者 事件源实际是把适配类作为监听者注册入监听者队列中 而真正的事件响应者并未在监听者队列中 事件响应者应做的动作由适配类决定 目前绝大多数的开发工具在生成代码时 事件处理都是通过适配类来进行的
C#事件处理
在 NET应用程序开发中 不管是WEB Forms(ASP NET)还是Windows Forms 都涉及到大量对象的事件响应及处理 比如客户在线提交一份订单 或是在Windows窗口上移动鼠标等都将有事件发生 那么在C#中 是怎样声明事件并为事件添加响应方法的呢?
在C#中 事件(Events)成员就是用来声明一个类事件的 在类中声明一个事件成员一般采用如下的语法形式
public event 代表名 事件名
如在Control类中声明了一个Click事件成员 其语法如下
public event EventHandler Click;
在C#中 增加了一个新的数据类型delegate来解决事件处理问题 代表数据类型非常类似于C语言中的指针 其与指针不同的是 其运猛手是代码是安全的 可管理的 由于C#本身的简易性 对于没有使用过C及指针的程序来说 理解delegate也是非常容易的
在C#中 通过使用delegate 你可以通过 += 操作符非常容易地为 Net对象中的一个事件添加一个甚至多个响应方法 还可以通过非常简单的 = 操作符取消这些响应方法 如下面为temp按钮添加Click事件的语句
temp Click+=new System EventHandler(this Test);//为test添加事件处理方法
在上面声明事件的语句中 Eventhandler是一个delegate(代表)类型 其在 Net类库中如下声明的
public delegate void EventHandler(object sender EventArgs e);
这样 所有形如:void 函娄名(object 参数名 EventArgs 参数名);的函数都可以作为Control类的Click事件响应方法了 如下面所定义的一个事件响应方法
private void button _Click(object sender System EventArgs e)
由于是通过delegate来处理事件 因此 可能通过累加使一个事件具有多个响应方法 与此同时 还可以使一个方法作为多个事件的响应方法(注意 在C#语言类中的event成员后面只能出现 += 与 = 两个表示添加与取消事件响应函数的操作符) 不管是ASP Net还是一般的Windows Forms 编程 在C#中 基本上我们遇到的事件响应方法都是说明成如下的形式
private void button _Click(object sender System EventArgs e)
那么 一个事件响应方法的存取权限 返回值类型 参数及类型甚至方法名称等是否都必须固定不变呢?答案是 不是!
一般情况下 事件的响应方法中都有两个参数 其中一个代表引发事件的对象即sender 由于引发事件的对象不可预知的 因此我们把其声明成为object类型 所有的对象都适用 第二个参数代表引发事件的具体信息 各种类型的事件中可能不同 这要根据类中事件成员的说明决定
我们知道 事件是通过delegate来处理的 假设将要表示事件说明成如下形式
delegate int MyEventHandler(object sender ToolBarButtonClickEventArgs e);
则当涉及上面的事件响应函数声明时 就须要声明成如下的形式
private int MyTest(object sender ToolBarButtonClickEventArgs e) {}
在给对象添加事件响应方法时就可以用如下的代码实现
Control Event+=new MyEventHandler(MyTest);
lishixinzhi/Article/program/net/201311/14835
java的事件处理是什么?
打个比方:如果用户用鼠标单击了按钮对象button,则该按钮button就是事件源,而java运行时系统会生成ActionEvent类的对象actionE,该对象中描述了该单击事件发生时的一些信息,然后,事件处理者对象将接收由java运行时系统传递过来的事件对象actionE并进行相应的处理。
由于同一个事件源上可能发生多种事件,因此java采取了授权处理机制,事件源可以把在其自身所有可能发生的事件分别贺衫陪授权给不同的事件处理者来处理。塌雹比如在Canvas对象上既可能发生鼠标事件,也可能发生键盘事件,该Canvas对象就可以授权给事件处理者一来处理鼠标事件,同时授权给事件处理者二来处理键盘事件。有时也将事件处理者称为监听器,主要原因也在于监听器时刻监听着事件源上所有发生的事件类型,一旦该事件类型与自己所禅蠢负责处理的事件类型一致,就马上进行处理。授权模型把事件的处理委托给外部的处理实体进行处理,实现了将事件源和监听器分开的机制。事件处理者(监听器)通常是一个类,该类如果要能够处理某种类型的事件,就必须实现与该事件类型相对的接口。例如例5.9中类ButtonHandler之所以能够处理ActionEvent事件,原因在于它实现了与ActionEvent事件对应的接口ActionListener。每个事件类都有一个与之相对应的接口。将事件源对象和事件处理器(事件监听器)分开。
使用授权处理模型进行事件处理的一般方法归纳如下:
1.对于某种类型的事件XXXEvent, 要想接收并处理这类事件,必须定义相应的事件监听器类,该类需要实现与该事件相对应的接口XXXListener;
2.事件源实例化以后,必须进行授权,注册该类事件的监听器,使用addXXXListener(XXXListener ) 方法来注册监听器。
这是我的一点个人见解,希望对你有帮助,加油。
java1.0之后使用的事件处理方式是
Java的事件处理
在Java程序设计中,事件的处理是非常重要的,尤其是在需要自定义事件和设计JavaBean时。
JDK1.0 和JDK1.1采用不同的事件处理模型,其中JDK1.0采用的是层次模型,而JDK1.1采用的是委托模型。了解两种模型的基本原理和差异将有助于我们更好地理解和掌握JDK1.1的事件模型。
1JDK1.0的层次事件模型
在层次事件模型中,当一个事件对象产生后,首先传递给直接相关的组件,该组件可以对事件进行处理,也可以忽略事件不处理。如果组件没有对事件喊早进行处理,则事件处理系统会将事件继续向上传递给组件所在的容器。同样,容器可以对事件处理,也可以忽略不处理。如果事件又被忽略,则事件处理系统会将事件继续上传,以次类推,直到事件被处理,或是已传到顶层容器。
2JDK1.1的授权事件模型
为了克服JDK1.0层次事件模型的缺点,JDK1.1引入了授权事件模型,在这个模型中,事件处理是从一个事件源授权到一个或多个事件监听者,组件作为事件源可以触发事件,通过addXXXlistener()方法向组件注册监听器,一个组件可以注册多个监听器,如果组件触发了相应类型的事件,此事件被传送给已注册的监听器,事件监听器负责处理事件的过程。
例如,我们在javaGUI编程的时候,创建一个组件,如一个按钮,再为它创建一个监听器。这样,程序执行的时候我们点击按钮,java会自动的调用监听器的相应的方法在理解JA V A中事件处理机制前我们必须先理解三个重要的概念:
z事件源:产生事件的对象;
z事件处理器(监听器):负责处理事件,是一个实现事件接听器接口的对象,而这个接口又继承自java.util.EventListener接口。
z事件对象:用于在事件源与事件处理器间传递信息的桥梁。镇袭事件都继承自java.util.EventObject类。
它们之间的关系是:当事件源产生事件时,事件一直传播到相应的事件监听器,然后监听器调用特定的方法处理事件。
3示郑旅雀例
对事件的处理过程有一个完整的认识对于编程是很有帮助的。下面用一个演示性的例子来说明事件及其处理过程。
一事件的组成
如果想要自定义一个事件,则必须提供一个事件的监听接口以及一个事件类。在Java 中监听接口继承java.util.EventListener,事件类继承java.util.EventObject。很多基本的事件在编程环境中都已经提供可以很方便使用,但是在自定义事件中必须要要了解这些。
下面是一个事件类的代码,事件类可以向用户处理程序提供被监听类的信息:
import java.util.*;
public class PropertyEvent extends EventObject {
public PropertyEvent(){}
}
下面是监听接口的代码:
import java.util.*;
public interface PropertyListener extends EventListener {
public void propertyChanged(PropertyEvent propertyEvent);
}
二事件的处理机制
下面是一段简要的被监听类代码,即事件源,通过代码分析事件处理过程:
import java.util.*;
public class Exam
{
private int property;
private Set listeners= new HashSet();// 用来存放已注册的监听对象
.....
public void addListener(PropertyListener propertyListener)
{
listeners.add(propertyListener);
}
public void firePropertyChange()
{
Iterator iterator;
iterator = new HashSet(listeners).iterator();
PropertyEvent propertyEvent = new PropertyEvent();
while(iterator.hasNext())
{
PropertyListener propertyListener = (propertyListener) iterator.next();
propertyListener.propertyChanged(propertyEvent);
}
}
}
当属性值发生变化时,首先进行内部处理调用firePropertyChange方法,产生一个事件对象,然后用事件对象为参数来调用用户的事件处理程序。
三事件处理的使用
1、基本用法
public Exam exam;// 事件源
exam.addListener(PropertyListener propertyListener);// 注册事件监听器
public void propertyChange(PropertyEvent event){...}// 事件监听器中的事件处理方法
2、一个被监听对象可以有多个监听对象
exam.addListener(listener1);
exam.addListener(listener2);
这样当exam的property发生变化时, Listener1和Listener2的处理程序都会被调用。当然listener1和listener2必须都是已实现接口方法的类。
3、被监听的对象也可以是实现了方法的接口
exam.addListener(new PropertyListener())
{
//用户定义事件处理过程
public void propertyChange(PropertyEvent event)
{
...
}
);
这种方法在实际编程中非常方便。
四示例
z示例:TestDemo.java,DemoEvent.java,DemoSource.java,DemoListener.java,Listener1.java,Listener2.java,Listener3.java
z示例:EventTest.java
通过恋爱关系模拟事件处理机制:女孩子(事件源)产生高兴或不高兴的情绪(事件对象)时,男朋友(监听器)应该怎么做。
1、确定三个类:Gril、Emotion、Boy
2、Gril:有一个名字属性,一个男朋友的属性,还有一个add添加男朋友的方法,还有一个remove分手的方法。
Boy:有一个名字属性,有happy和unhappy两个在女朋友找你时做相应处理的方法。还要有监听器的功能,所以要实现EventListener接口:创建一个有具体功能的监听接口EventListen,具有happy、unhappy抽像方法,而Boy通过实现这个接口,来完成有个性的处理方法。
Emotion是一个事件对象,它要继承EventObject。其中有一个方法getSource,通过这个方法就可以找到事件源了。
3、Boy要根据Gril产出的不同事件对象使用不同的处理方法时,要接受事件对象Emotion的传入,即方法接收传入参数。
4、Gril:有一个发牌气的方法fire,假设她1、3、5 happy,2、4、6 unhappy,7分手。
¥
5
百度文库VIP限时优惠现在开通,立享6亿+VIP内容
立即获取
Java的事件处理
Java的事件处理
在Java程序设计中,事件的处理是非常重要的,尤其是在需要自定义事件和设计JavaBean时。
JDK1.0 和JDK1.1采用不同的事件处理模型,其中JDK1.0采用的是层次模型,而JDK1.1采用的是委托模型。了解两种模型的基本原理和差异将有助于我们更好地理解和掌握JDK1.1的事件模型。
1JDK1.0的层次事件模型
在层次事件模型中,当一个事件对象产生后,首先传递给直接相关的组件,该组件可以对事件进行处理,也可以忽略事件不处理。如果组件没有对事件进行处理,则事件处理系统会将事件继续向上传递给组件所在的容器。同样,容器可以对事件处理,也可以忽略不处理。如果事件又被忽略,则事件处理系统会将事件继续上传,以次类推,直到事件被处理,或是已传到顶层容器。
浅析Java与C#的事件处理机制(一)
Java与C#的事件处理都是实现了事件源 事件响应者机制 但又不完全相同 Java实现的是一种事件源与事件响应者两级实体对象方式 这里的事件响应者也是事件监听者 而C#实现的是一种事件源 代理 事件响应者三级实体对象方式 下面就这两种方式来具体说明
Java事件处理
从概念上讲 事件是一种在 源对象 和 监听者对象 之间 某种状态发生变化的传递机制 事件有许多不同的用途 例如在Windows系统中常要处理的鼠标事件 窗口边界改变事件 键盘事件等 在Java中则是定义了一个普通的 可扩充的事件机制 这种机制能够
对事件类型和传递的模型的定义和扩充提供一个公共框架 并适合于广泛的应用
与Java语言和环境有较高的集成度
事件能被描述环境捕获和触发
能使其它构造工具采取某种技术在设计时直接控制事件 以及事件源和事件监听者之间的联系
事件机制本身不依赖于复杂的开发工具
事件从事件源到监听者的传递是通过对目标监听者对象的Java方法调用进行的 对每个明确的事件的发生 都相应地定义一个明确的Java方法 这些方法都集中定义在事件监听者(EventListener)接口中 这个接口要继承java util EventListener 实现了事件监听者接口中一些或全部方法的类就是事件监听者 伴随着事件的发生 相应的状态通常都封装在事件状态对象中 该对象必须继承自java util EventObject 事件状态对象作为单参传递给应响应该事件的监听者方法中 发出某种特定事件的事件源的标识是 遵从规定的设计格式为事件监听者定义注册方法 并接受对指定事件监听者接口实例的引用 有时 事件监听者不能直接实现事件监听者接口 或者还有其它的额外动作时 就要在一个源与其它一个或多个监听者之间插入一个事件适配器类的实例 来建立它们之间的联系
事件状态对象(Event State Object)
与事件发生有关的状态信息一般都封装在一个事件状态对象中 这种对象是java util EventObject的子类 按设计习惯 这种事件状态对象类的名应以Event结尾 例如
public class MouseMovedExampleEvent extends java util EventObject{ protected int x y /* 创建一个鼠标移动事件MouseMovedExampleEvent */ MouseMovedExampleEvent(java awt Component source Point location) {super(source);x = location x; 嫌银携 y = location y; } /* 获取鼠标位置*/ public Point getLocation() {return new Point(x y); }}
事件监听者接口(芹伏EventListener Interface)与事件监听者
由于Java事件模型是基于方法调用 因而需要一个定义并组织事件操纵方法的方式 事件操纵方法都被定义在继承了java util EventListener类的EventListener接口中 按规定 EventListener接口的命名要以Listener结尾 任何一个类如果想操纵在EventListener接口中定义的方法都必须以实现这个接口方式进行 这个类也就是事件监听者 例如
搏岁 /*先定义了一个鼠标移动事件对象*/public class MouseMovedExampleEvent extends java util EventObject { // 在此类中包含了与鼠标移动事件有关的状态信息 }/*定义了鼠标移动事件的监听者接口*/interface MouseMovedExampleListener extends java util EventListener { /*在这个接口中定义了鼠标移动事件监听者所应支持的方法*/ void mouseMoved(MouseMovedExampleEvent mme);}
在接口中只定义方法名 方法的参数和返回值类型 如 上面接口中的mouseMoved方法的具体实现是在下面的ArbitraryObject类中定义的
class ArbitraryObject implements MouseMovedExampleListener { public void mouseMoved(MouseMovedExampleEvent mme){ }}
ArbitraryObject就是MouseMovedExampleEvent事件的监听者
事件监听者的注册与注销
为了各种可能的事件监听者把自己注册入合适的事件源中 建立源与事件监听者间的事件流 事件源必须为事件监听者提供注册和注销的方法 在前面的bound属性介绍中已看到了这种使用过程 在实际中 事件监听者的注册和注销要使用标准的设计格式
public void add ListenerType( ListenerType listener) public void remove ListenerType( ListenerType listener)
首先定义了一个事件监听者接口
public interface ModelChangedListener extends java util EventListener { void modelChanged(EventObject e);}
接着定义事件源类
lishixinzhi/Article/program/net/201311/14840
java的事件处理的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java中事件处理、java的事件处理的信息别忘了在本站进行查找喔。
