Java與Flex學習筆記(3)—-理解Flash中的事件機制

來源:互聯網
上載者:User

    

       上次測試中當我們點擊“發送”按鈕時,flex就會與後台中定義的Java方法互動並將結果返回給flex並呈現在前台頁面,其實這靠的就是事件。事件貫穿在Flex中的所有過程中,如果沒有事件,那麼就談不上什麼人機互動。


        Flash的ActionScript語言支援事件編程。在ActionScript中,每個事件都由一個事件對象表示。事件對象是flash.events.Event類或其某個子類的執行個體。事件對象不但存貯有關特定事件的資訊,還包含便於操作事件對象的方法。事件對象有如下兩個用途:


        ●事件對象通過將特定事件的資訊存貯在一組屬性中來代表實際事件。


        ●事件對象包含一組方法,可用於操作事件對象和影響事件處理系統的行為。


        建立事件對象後,就可以通過ActionScript的API方法派發(dispatch)該事件對象。所謂的“派發”就是將該事件對象按照一定規則順序地傳遞給其他對象並執行這些對象上註冊的事件接聽程式.


        這些能夠收聽到該事件的對象被稱之為事件的目標(target)對象。我們可以編寫事件接聽程式對傳遞到目標對象上的事件進行處理。


        事件接聽程式是我們自己編寫的,用於響應特定事件的函數和方法。事件接聽程式可以是目標對象的函數和方法,也可以是其他對象上的函數和方法。但事件接聽程式必須在目標對象上註冊才能對傳遞給目標對象上的事件進行處理。

為了更好的理解Flash中的事件機制,我們通過一個小例子來看看事件是怎麼進行的!

 

       1.     建立自訂事件類別


      在ActionScript中,自訂的事件類別必須繼承flash.events.Event類,下面是一個自訂的事件類別TestEvent,代碼如下所示:


package com.flex.ases{    import flash.events.Event;       public class TestEvent extends Event    {       public static const TEST_EVENT:String="TEST_EVENT";       public var data:Object;       public function TestEvent(type:String, bubbles:Boolean=false, cancelable:Boolean=false)       {           super(type, bubbles,cancelable);       }    }}


       這個類自訂了一個事件類型“TEST_EVENT”,而data則用於存貯事件資訊。而TestEvent類的建構函式必須提供如上所示的3個參數,這麼做是為了父類的建構函式提供所需的函數:


       ●type:表示事件類型的一個字串。他不僅表示具體事件對象的含義,而且事件接聽程式也是根據事件的類型對事件進行偵聽。事件類型的字串一般都是用靜態變數定義的,即用const關鍵字修飾。


        ●bubbles:表示事件是否“冒泡”。這個以後會學習到。


       ●cancelable:表示事件調度過程中,目標對象上對事件的預設處理是否可以取消。這個稍後也會仔細分析的。

 

       2.     建立事件適配器


       在ActionScript中,只有flash.events.EventDispatcher類及其子類的執行個體才能派發事件。派發事件的方法則是以要被派發的事件對象作為參數來調用EventDispatch類或其子類執行個體的dispatchEvent()方法。


        在ActionScript中,只有flash.events.EventDispatcher類及其子類的執行個體才可以成為事件的目標對象,因為只有flash.events.EventDispatcher類及其子類的執行個體才可以註冊事件接聽程式,從而決定怎麼處理達到該目標對象上的事件。


       下面代碼中建立了一個TestEventDispatch類並繼承了EventDispatcher類,代碼如下所示:


package com.flex.ases{    import flash.events.Event;    import flash.events.EventDispatcher;    import flash.events.IEventDispatcher;       import mx.controls.Alert;       public class TestEventDispatch extends EventDispatcher    {       public functionTestEventDispatch(target:IEventDispatcher=null)       {           super(target);           this.addEventListener(TestEvent.TEST_EVENT,testEventMethod);       }             protected function testEventMethod(event:TestEvent):void       {           // TODOAuto-generated method stub           Alert.show(event.data as String,"提示");       }       public function createTestEvent():void{           var testEvent:TestEvent=new TestEvent(TestEvent.TEST_EVENT);           testEvent.data="你已經觸發自訂事件!";           this.dispatchEvent(testEvent);       }          }}


         通過上面這段代碼我們可以看出,TestEventDispatch類中createTestEvent方法中建立了一個TestEvent事件的執行個體,並指定此事件的類型為TEST_EVENT,並給此事件執行個體添加了一條資訊。然後我們把此執行個體作為派發事件的參數進行派發事件。


         我們在此類的建構函式中添加事件接聽程式,並用testEventMethod作為TEST_EVENT事件類型的處理方法。


         3.     測試


         現在開始調用此事件,代碼如下所示:


<?xmlversion="1.0" encoding="utf-8"?><s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"              xmlns:s="library://ns.adobe.com/flex/spark"              xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">       <fx:Script>       <![CDATA[           import com.flex.ases.TestEvent;           import com.flex.ases.TestEventDispatch;           protected function test_clickHandler():void           {              // TODOAuto-generated method stub              var testEventDispatch:TestEventDispatch=newTestEventDispatch();              testEventDispatch.createTestEvent();                        }       ]]>    </fx:Script>       <fx:Declarations>       <!-- Place non-visualelements (e.g., services, value objects) here -->    </fx:Declarations>    <s:Label x="34"y="97"fontSize="19" text="點擊按鈕觸發自訂事件:"/>    <s:Button id="test" x="284" y="87" height="28" label="觸發" click="test_clickHandler()"             fontSize="18"/></s:Application>

 

       運行此頁面,如下所示:


       點擊“觸發”按鈕,則會調用自訂的TestEvent事件,頁面如下所示:




       好了,經過這麼一學習,現在對flash的事件機制有了一個質地的理解。


      原創文章,轉載請註明出處:   http://www.dianfusoft.com/showDetail.action?articleId=130405014424,更多原創內容,請訪問:http://www.dianfusoft.com/





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.