JAVA自定义事件监听完整例子---sunfruit[转]

http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763105392230e54f733628a854d2c90c05f93130716017bb2e1707e4e5f8099297a52ef0f07bbae61332a032ab59bc2835dddccc86e70d633712d5cd04e4a805dfcdc4654d651e34d98af0e97cbe746e4b9d3a3c82551dd27736df6f59c2c01&p=90769a478e9711a05bed90665907bb&newp=9877c54ad5c345f32aa5c7710f0c9d231610db2151d4d51323a6db&user=baidu&fm=sc&query=java+%CA%C2%BC%FE%C0%FD%D7%D3&qid=b67957270000b424&p1=10

/** *//**
* Title: 事件处理类,继承了事件基类
* Description: 
* Copyright: Copyright (c) 2005
* Company: cuijiang
* @author not attributable
* @version 1.0
*/
public class DemoEvent extends EventObject
{
   private Object obj;
   private String sName;
   public DemoEvent(Object source,String sName)   {
     super(source);
     obj = source;
     this.sName=sName;
   }
   public Object getSource()
   {
     return obj;
   }
   public void say()
   {
     System.out.println("这个是 say 方法");
   } 

   public String getName()
   {
     return sName;
   }
}


package demo;

import java.util.EventListener;

/** *//**
* Title: 监听器接口
* Description: 
* Copyright: Copyright (c) 2005
* Company: cuijiang
* @author not attributable
* @version 1.0
*/
public interface DemoListener extends EventListener{
   public void demoEvent(DemoEvent dm);
}


package demo;
import java.util.*;

/** *//**
* Title: 使用事件的类
* Description: 该类实现了监听器的添加和监听器方法的执行,并且实现了由于属性的改变而执行事件
* Description: 在添加、删除、执行监听器的时候都要注意同步问题
* Copyright: Copyright (c) 2005
* Company: cuijiang
* @author not attributable
* @version 1.0
*/
public class DemoSource{
   private Vector repository = new Vector();
   private DemoListener dl;
   private String sName=""; 

   public DemoSource()
   {
   }

   //注册监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
   public void addDemoListener(DemoListener dl)
   {
     repository.addElement(dl);//这步要注意同步问题
   }

   //如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
   public void notifyDemoEvent(DemoEvent event) {
     Enumeration enum = repository.elements();//这步要注意同步问题
     while(enum.hasMoreElements())
     {
       dl = (DemoListener)enum.nextElement();
       dl.demoEvent(event);
     }
   }

   //删除监听器,如果这里没有使用Vector而是使用ArrayList那么要注意同步问题
   public void removeDemoListener(DemoListener dl)
   {
     repository.remove(dl);//这步要注意同步问题
   }

   /** *//**
    * 设置属性
    * @param str1 String
    */
   public void setName(String str1)
   {
     boolean bool=false;
     if(str1==null && sName!=null) bool=true;
     else if(str1!=null && sName==null) bool=true;
     else if(!sName.equals(str1)) bool=true;

     this.sName=str1;

     //如果改变则执行事件
     if(bool) notifyDemoEvent(new DemoEvent(this,sName));
   }

   public String getName()
   {
     return sName;
   }
}


package demo;

import java.lang.Thread;

/** *//**
* Title: 测试类
* Description: 测试了由于改变属性而引起的事件发生
* Copyright: Copyright (c) 2005
* Company: cuijiang
* @author not attributable
* @version 1.0
*/
public class TestDemo
     implements DemoListener {
   private DemoSource ds; 

   public TestDemo()
   {
     ds=new DemoSource();
     ds.addDemoListener(this);
     System.out.println("添加监听器完毕");
     try {
       Thread.sleep(3000);
       //改变属性,触发事件
       ds.setName("改变属性,触发事件");
     }
     catch (InterruptedException ex) {
       ex.printStackTrace();
     }

     ds.addDemoListener(this);
     System.out.println("添加监听器完毕2");
     try {
       Thread.sleep(3000);
       //改变属性,触发事件
       ds.setName("改变属性,触发事件2");
     }
     catch (InterruptedException ex) {
       ex.printStackTrace();
     }

     ds.removeDemoListener(this);
     System.out.println("添加监听器完毕3");
     try {
       Thread.sleep(3000);
       //改变属性,触发事件
       ds.setName("改变属性,触发事件3");
     }
     catch (InterruptedException ex) {
       ex.printStackTrace();
     }


   }

   public static void main(String args[])
   {

     new TestDemo();
   }

   /** *//**
    * demoEvent
    *
    * @param dm DemoEvent
    * @todo Implement this test.DemoListener method
    */
   public void demoEvent(DemoEvent dm) {
     System.out.println("事件处理方法");
     System.out.println(dm.getName());
     dm.say();
   }
}

时间: 2024-11-03 03:36:40

JAVA自定义事件监听完整例子---sunfruit[转]的相关文章

cocos2d-js 自定义事件监听派发

熟悉js的dom事件或者flash事件的,基本都能立马明白cc.eventManager的用法. cc.eventManager有两种注册监听器的方式,一种是原生事件,例如 cc.eventManager.addListener({ event: cc.EventListener.KEYBOARD, onKeyReleased: function(keyCode, event) { if (keyCode == cc.KEY.back) { cc.director.end(); } }}, th

JavaScript自定义事件监听

一.事件的属性和方法 1 //事件Event 2 //属性:` 3 `bubbles`:布尔值,是否会冒泡 4 `cancelable`:布尔值,是否可以取消默认动作 5 `target`:目标对象 6 `currentTarget`:当前对象 7 `timeStamp`:时间戳(相对于某个时刻) 8 `type`:事件类型,即注册该事件的名字 9 `eventPhase`:返回事件传播的当前阶段 10 11 12 //方法 13 1.event.stopPropagation(); 阻止冒泡

Java Spring 自定义事件监听

ApplicationContext 事件 定义一个context的起动监听事件 import org.springframework.context.ApplicationListener; import org.springframework.context.event.ContextStartedEvent; public class EventStart implements ApplicationListener<ContextStartedEvent>{ @Override pub

c++中怎么自定义事件监听(回调函数)

废话不多说,上代码: 1 #include <iostream> 2 #include <vector> 3 using namespace std; 4 class A 5 { 6 private: 7 int a = 5; 8 vector<void(*)(int)> funcs; 9 public: 10 void setA(int a_); 11 void registerCallback(void(*p)(int)); 12 }; 13 14 void dis

JAVA GUI 事件监听事件 详解 和 案例.

GUI(图形用户界面) Graphical User Interface(图形用户接口) 用图形的 方式, 来显示 计算机操作的 界面, 这样更方便 更直观. CLI Command Line User Interface(命令行用户接口) 就是常见的 Dos 命令行操作. 需要记忆一些常用的命令, 操作不直观. Java 为 GUI 提供的 对象 都存在 java.awt 和 javax.swing 两个包中. Java 图形化界面的 产品: eclipse 这个产品使用 纯Java 语言 编

Java 键盘事件监听KeyListener

1.按下键盘时发生动作事件 方法摘要  void keyPressed(KeyEvent e)           按下某个键时调用此方法.  void keyReleased(KeyEvent e) 释放某个键时调用此方法.  void keyTyped(KeyEvent e) 键入某个键时调用此方法. 1 public class TestKeyAndMouse extends Frame implements KeyListener 2 { 3 static TextField field

Java 鼠标事件监听MouseListener

1.鼠标按下 .松开 .进入.移除等时发生动作事件 方法摘要: MouseClicked void mouseClicked(MouseEvent e)   鼠标按键在组件上单击(按下并释放)时调用. mousePressed void mousePressed(MouseEvent e)   鼠标按键在组件上按下时调用. mouseReleased void mouseReleased(MouseEvent e)    鼠标按钮在组件上释放时调用. mouseEntered void mous

Java 鼠标事件监听WindowListener

1.点击时产生相应的动作事件 方法摘要  void windowActivated(WindowEvent e)           将 Window 设置为活动 Window 时调用.  void windowClosed(WindowEvent e) 因对窗口调用 dispose 而将其关闭时调用.  void windowClosing(WindowEvent e) 用户试图从窗口的系统菜单中关闭窗口时调用.  void windowDeactivated(WindowEvent e) 当

Spring Boot实践——事件监听

借鉴:https://blog.csdn.net/Harry_ZH_Wang/article/details/79691994 https://blog.csdn.net/ignorewho/article/details/80702827     https://www.jianshu.com/p/edd4cb960da7 事件监听介绍 Spring提供5种标准的事件监听: 上下文更新事件(ContextRefreshedEvent):该事件会在ApplicationContext被初始化或者