my java note ---- 事件机制

# java 事件(java Event)
# java.util.Eventobject,java.util.EventListener
# victor
# 2016.06.16

Java 事件处理机制

java中的事件机制的参与者有3种角色:
    1. event object:事件状态对象,是一类事件的实例。
        伴随着事件的发生,相应的状态通常都封装在事件状态对象中,该对象必须继承自java.util.EventObject。事件状态对象作为单参传递给应响应该事件的监听者方法中。
    2. event source:具体的事件源,事件的生产者。
        发出某种特定事件的事件源的标识是:遵从规定的设计格式为事件监听者定义注册方法,并接受对指定事件监听者接口实例的引用。
    3. event listener:事件监听者,事件的消费者。
        具体的对监听的事件类,当它监听到event object产生的时候,它就调用相应的方法,进行处理。

<Note>
    public interface EventListener:所有事件侦听器接口必须扩展的标记接口。
    public class EventObject extends Object implements Serializable。所有事件状态对象都将从其派生的根类。 所有 Event 在构造时都引用了对象 "source",在逻辑上认为该对象是最初发生有关 Event 的对象。

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

运行结果:

Console>> Console is started.
lights>> lights are changing.
Light 0>> is off
Light 1>> is off
Light 2>> is on
Light 3>> is off
Light 4>> is on
Light 5>> is on
Light 6>> is off
Light 7>> is on
Light 8>> is on
Light 9>> is on
lights>> lights are changing.
Light 0>> is on
Light 1>> is on
Light 2>> is on
Light 3>> is on
Light 4>> is off
Light 5>> is on
Light 6>> is on
Light 7>> is off
Light 8>> is on
Light 9>> is off

OUTPUT

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

JAVA CODE:

1. 定义事件对象

package event;

import java.util.EventObject;

public class LightEvent extends EventObject {

    private static final long serialVersionUID = -1256654879784096588L;
    private boolean lightstate = false;
    private String lightname;

    public String getLightname() {
        return lightname;
    }

    public boolean getLightstate() {
        return lightstate;
    }

    public LightEvent(Object source,String name,boolean state) {
        super(source);
        this.lightstate = state;
        this.lightname = name;
    }

}

Event Class

2. 定义事件监听接口和具体的监听者类

package event;

import java.util.EventListener;

public interface lightlistener extends EventListener {
    public abstract void listenlight (LightEvent event);
}

package event;

public class lightlistener1 implements lightlistener{
    public void listenlight (LightEvent event){
        if(event.getLightstate()){
            System.out.println(""+event.getLightname()+">> is on");
        }
        else{
            System.out.println(""+event.getLightname()+">> is off");
        }
    };

}

Listener interface & Concrete listener

3. 定义事件源和注册类

//register
package event;

import java.util.*;

public class listenerregister {
    public List<EventListener> listenerlist = new ArrayList<EventListener>();

    public void addListener(EventListener listener) {
        listenerlist.add(listener);
    }

    public void removeListener(EventListener listener) {
        listenerlist.remove(listener);
    }

    public void notifylisteners(LightEvent event){
        for(EventListener tmplistener : listenerlist){
            ((lightlistener)tmplistener).listenlight(event);
        }
    }
}

// EventSource
package event;

import java.util.*;

public class Console {
    private listenerregister register = new listenerregister();
    private boolean[] lights = new boolean[10] ;
    private Random randomer = new Random();

    public void setLights(boolean light, int index) {
        this.lights[index] = light;
        String name = "Light "+ index;
        LightEvent event = new LightEvent(this,name,light);
        notifylisteners(event);
    }

    public void notifylisteners(LightEvent event){
        register.notifylisteners(event);
    }

    public void addListener(EventListener listener) {
        register.listenerlist.add(listener);
    }

    public void removeListener(EventListener listener) {
        register.listenerlist.remove(listener);
    }

    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub
        System.out.println("Console>> Console is started.");
        Console console = new Console();
        console.addListener(new lightlistener1());
        while(true){
            System.out.println("lights>> lights are changing.");
            for(int i=0;i<10;i++){
                console.setLights(console.randomer.nextBoolean(), i);
            }
            Thread.sleep(1000);
        }
    }
}

EventSource & Register

时间: 2024-09-29 05:52:08

my java note ---- 事件机制的相关文章

java 事件机制

java的事件机制一般包括三个部分:EventObject,EventListener和Source. EventObject java.util.EventObject是事件状态对象的基类,它封装了事件源对象以及和事件相关的信息.所有java的事件类都需要继承该类. EventListener java.util.EventListener是一个标记接口,就是说该接口内是没有任何方法的.所有事件监听器都需要实现该接口.事件监听器注册在事件源上,当事件源的属性或状态改变的时候,调用相应监听器内的

Java事件机制

Java事件由事件类和监听接口组成,自定义一个事件前,必须提供一个事件的监听接口以及一个事件类.JAVA中监听接口是继承java.util.EventListener的类,事件类继承java.util.EventObject的类.很多基本的事件系统已经为我们定义好了,我们只要学会调用即可,但是为了更加灵活地满足特定的需求,我们有时候也需要自定义事件. 对于事件的理解:http://lyunabc.iteye.com/blog/1538940这篇博文讲的不错,有助于我们理解事件从产生到处理这一过程

关于JAVA中事件分发和监听机制实现的代码实例-绝对原创实用

http://blog.csdn.net/5iasp/article/details/37054171 文章标题:关于JAVA中事件分发和监听机制实现的代码实例 文章地址: http://blog.csdn.net/5iasp/article/details/37054171 作者: javaboy2012Email:[email protected]qq:    1046011462 一.场景假设 假设有博客系统中需要实现如下功能: 系统中用户发布文章,修改文章,删除文章时,需要一些相关的操作

JavaGC专家(1)—深入浅出Java垃圾回收机制

在学习GC之前,你首先应该记住一个单词:"stop-the-world".Stop-the-world会在任何一种GC算法中发生.Stop-the-world意味着 JVM 因为要执行GC而停止了应用程序的执行.当Stop-the-world发生时,除了GC所需的线程以外,所有线程都处于等待状态,直到GC任务完成.GC优化很多时候就是指减少Stop-the-world发生的时间. 按代的垃圾回收机制 在Java程序中不能显式地分配和注销内存.有些人把相关的对象设置为null或者调用Sy

聊一聊Android的事件机制

侯 亮 1概述 在Android平台上,主要用到两种通信机制,即Binder机制和事件机制,前者用于跨进程通信,后者用于进程内部通信. 从技术实现上来说,事件机制还是比较简单的.从大的方面讲,不光是Android平台,各种平台的消息机制的原理基本上都是相近的,其中用到的主要概念大概有: 1)消息发送者: 2)消息队列: 3)消息处理循环. 示意图如下: 图中表达的基本意思是,消息发送者通过某种方式,将消息发送到某个消息队列里,同时还有一个消息处理循环,不断从消息队列里摘取消息,并进一步解析处理.

java:从消息机制谈到观察者模式

本文接编程思想之消息机制,读者可以结合编程思想之消息机制一起阅读,也可以直接从本文开始阅读. 从简单的例子开始 同样,我们还是先看一个简单例子:创建一个窗口实现加法的计算功能.其效果如下: 图1: 加法计算 Calculator.java: import javax.swing.*; import javax.swing.border.BevelBorder; import java.awt.*; import java.awt.event.ActionEvent; import java.aw

从Chrome源码看浏览器的事件机制

.aligncenter { clear: both; display: block; margin-left: auto; margin-right: auto } .crayon-line span::after { content: " " } p { font-size: 15px; text-indent: 2em } #colorbox.crayon-colorbox,#cboxOverlay.crayon-colorbox,.crayon-colorbox #cboxWr

成为JavaGC专家(1)—深入浅出Java垃圾回收机制

转载自:http://www.importnew.com/1993.html 对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用. 这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者.如果你对GC的处理过程感兴趣,说明你已经具备较大规模应用的开 发经验.如果你曾经想过如何正确的选择GC算法,那意味着你已经完全理解你所开发的应用的特点.当然,我们不能以偏概全,这不

接口和事件机制

接口: 在java程序设计语言中,与类不同,接口的定义需要用interface. 接口不是类,而是对类的一组需求描述,这些类要按照接口描述的同意格式进行定义. 这就是说,任何实现Ball接口的类都需要包含play方法. 下面是Ball接口的代码: 1 public interface Ball{ 2 void play(); 3 } 下面是FootBall类的代码: 1 public class Football implements Ball{ 2 public void play{ 3 Sy