?? java用戶自定義事件監(jiān)聽完整例子.txt
字號(hào):
sunfruit的博客
[JAVA]用戶自定義事件監(jiān)聽- -| 回首頁 | 2005年索引 | - -原碼、補(bǔ)碼和反碼
[原創(chuàng)]JAVA用戶自定義事件監(jiān)聽完整例子- -
--sunfruit
很多介紹用戶自定義事件都沒有例子,或是例子不全,下面寫了一個(gè)完整的例子,并寫入了注釋以便參考,完整的實(shí)例源代碼如下:
package demo;
import java.util.EventObject;
/**
*
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("這個(gè)是 say 方法...");
}
public String getName()
{
return sName;
}
}
package demo;
import java.util.EventListener;
/**
*
Title: 監(jiān)聽器接口
*
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: 該類實(shí)現(xiàn)了監(jiān)聽器的添加和監(jiān)聽器方法的執(zhí)行,并且實(shí)現(xiàn)了由于屬性的改變而執(zhí)行事件
*
Description: 在添加、刪除、執(zhí)行監(jiān)聽器的時(shí)候都要注意同步問題
*
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()
{
}
//注冊(cè)監(jiān)聽器,如果這里沒有使用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);
}
}
//刪除監(jiān)聽器,如果這里沒有使用Vector而是使用ArrayList那么要注意同步問題
public void removeDemoListener(DemoListener dl)
{
repository.remove(dl);//這步要注意同步問題
}
/**
* 設(shè)置屬性
* @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;
//如果改變則執(zhí)行事件
if(bool) notifyDemoEvent(new DemoEvent(this,sName));
}
public String getName()
{
return sName;
}
}
package demo;
import java.lang.Thread;
/**
*
Title: 測(cè)試類
*
Description: 測(cè)試了由于改變屬性而引起的事件發(fā)生
*
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("添加監(jiān)聽器完畢");
try {
Thread.sleep(3000);
//改變屬性,觸發(fā)事件
ds.setName("改變屬性,觸發(fā)事件");
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
ds.addDemoListener(this);
System.out.println("添加監(jiān)聽器完畢2");
try {
Thread.sleep(3000);
//改變屬性,觸發(fā)事件
ds.setName("改變屬性,觸發(fā)事件2");
}
catch (InterruptedException ex) {
ex.printStackTrace();
}
ds.removeDemoListener(this);
System.out.println("添加監(jiān)聽器完畢3");
try {
Thread.sleep(3000);
//改變屬性,觸發(fā)事件
ds.setName("改變屬性,觸發(fā)事件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();
}
}
- 作者: sunfruit 訪問統(tǒng)計(jì):225 2005年07月22日, 星期五 18:01 加入博采
Trackback你可以使用這個(gè)鏈接引用該篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=2354403
博客手拉手[2005-07-22] 一汽實(shí)習(xí)感懷
[2005-07-22] 我的博客,心情公社
[2005-07-22] CCIE一年后的心語
[2005-07-22] 執(zhí)子之手,與子攜老
[2005-07-22] 水藍(lán)色眼淚(序)
回復(fù) - 評(píng)論人:sunfruit 2005-08-26 17:43:43
TestDemo類由于測(cè)試了多種情況顯得多,其實(shí)并不復(fù)雜
發(fā)布人: 郵箱:
主 頁:
評(píng)論內(nèi)容:
2003-2004 BlogChina.COM All rights reserved
Powered by BlogDriver 2.1
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -