JAVA自訂監聽器的範例程式碼

來源:互聯網
上載者:User

標籤:

JAVA使用者自訂事件監聽完整例子

JAVA使用者自訂事件監聽完整例子- —sunfruit     很多介紹使用者自訂事件都沒有例子,或是例子不全,下面寫了一個完整的例子,並寫入了注釋以便參考,完整的執行個體原始碼如下:

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(“這個是 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();

}

}

JAVA自訂監聽器的範例程式碼

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.