Java實現事件機制


java中的事件機制的參與者有3種角色:

1.event object:事件狀態對象,用於listener的相應的方法之中,作為參數,一般存在與listerner的方法之中

2.event source:具體的事件源,比如說,你點擊一個button,那么button就是event source,要想使button對某些事件進行響應,你就需要注冊特定的listener。

3.event listener:對每個明確的事件的發生,都相應地定義一個明確的Java方法。這些方法都集中定義在事件監聽者(EventListener)接口中,這個接口要繼承 java.util.EventListener。 實現了事件監聽者接口中一些或全部方法的類就是事件監聽者。
 
事件狀態對象:
public class EventState extends EventObject {
 
       private static final long serialVersionUID = 1331423214321432154L;
 
       //參數為事件源和狀態名
       public EventState(Object source ,String state ) {
             super ( source );
             this . state = state ;
      }
      
       private String state = "" ;
       public String getState() {
             return state ;
      }
 
 
       public void setState(String state ) {
             this . state = state ;
      }
}
 
事件監聽者(事件處理)
//事件處理器 EventListener
public abstract   class Handler implements EventListener {
      
       public Handler(){}
      
       public void doHandler(EventState state ) {
            System. out .println( "handler1 執行了,現在狀態是:" );
      }
}
 
事件源(事件的發起和控制)
 
       //事件源
       public class EventSource {
             //事件隊列
             private Set<Handler> eventListeners ;
            
             public EventSource(){
                   this . eventListeners = new LinkedHashSet<Handler>();
            }
            
             public void addListeners(Handler handler ){
                   this . eventListeners .add( handler );
            }
            
             public void removeListeners(Handler handler ){
                   this . eventListeners .remove( handler );
            }
             //事件觸發
             public void triggerEvent1(){
                   if ( eventListeners == null ) {
                         return ;
                  }
                   //改變事件狀態
                  EventState state = new EventState( this , "triggerEvent1 sate" );
                  notifies( state );
            }
             //事件執行
             protected void notifies(EventState sate ){
                   if ( eventListeners .size()>0) {
                         for (Handler handler : eventListeners ) {
                               handler .doHandler( sate );
                        }
                  }
            }
      }
 
當我們觸發這個事件時
       public static void main(String[] args ) {
                  EventSource source = new EventSource();
                   source .addListeners( new Handler(){
                         //重寫事件處理函數
                         @Override
                         public void doHandler(EventState state ) {
                              System. out .println( "handler1 執行了,現在狀態是:" + state .toString());
                        }
                  });
                  
                   source .triggerEvent1();
      
            }
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM