イベントを使用すると、Flex アプリケーションで何かが起こったときに開発者はその内容を知ることができます。イベントは、マウスやキーボードなどのユーザー入力デバイスや、Web サービス呼び出しからの戻りなどの外部入力によって生成することができます。イベントは、コンポーネントの作成や廃棄、サイズの変更など、コンポーネントの外観やライフサイクルで変更が発生したときにもトリガされます。
アプリケーションでユーザー操作が行われると、イベントが生成されます。また、直接的なユーザー操作が行われていなくてもイベントが発生することがあります。例えば、サーバーからのデータのロードが終了した場合や、接続されたカメラがアクティブになった場合などです。コードでこれらのイベントを「処理」するには、イベントハンドラを追加します。「イベントハンドラ」とは、特定のイベントに応答するために記述する関数やメソッドです。これらは、「イベントリスナー」と呼ばれることもあります。
Flex のイベントモデルは、ドキュメントオブジェクトモデル(DOM)Level 3 イベントモデルに基づいています。Flex は DOM 標準に厳密には準拠していませんが、両者の実装は非常に似ています。Flex のイベントモデルは、Event オブジェクトとそのサブクラス、およびイベント送出モデルに準拠しています。Flex でイベントを使用する方法をすぐに知りたい場合は、イベントの使用のサンプルコードを参照してください。
コンポーネントは、イベントを生成および送出し、他のイベントを受け取ります。他のオブジェクトのイベントに関する情報を必要とするオブジェクトは、リスナーをそのオブジェクトに登録します。イベントが発生すると、対象のオブジェクトでは登録時に指定された関数を呼び出すことで、登録されたリスナーすべてにイベントを送出します。同一のオブジェクトから複数のイベントを受け取るには、イベントごとにリスナーを登録する必要があります。
コンポーネントにはビルトインイベントがあります。このようなイベントは、MXML アプリケーションの ActionScript ブロック内で処理します。Flex イベントシステムのディスパッチャー/リスナーモデルを使用して、アプリケーションの外部で独自にイベントリスナーを定義したり、特定のイベントを受け取るカスタムリスナーのメソッドを定義することもできます。ターゲットオブジェクトがイベントを送出したときにリスナーが呼び出されるよう、リスナーをターゲットオブジェクトに登録することができます。
Flex コントロールやコンテナなどのビジュアルオブジェクトはすべて、DisplayObject クラスのサブクラスです。これらは、アプリケーションを構成するビジュアルオブジェクトのツリーにあります。ツリーのルートは Stage です。その下に SystemManager オブジェクトがあり、さらにその下には Application オブジェクトが続きます。子コンテナおよびコンポーネントはツリーのリーフノードに当たります。このツリーのことを「表示リスト」と呼びます。表示リスト内のオブジェクトは、DOM 階層構造のノードに似ています。「表示リストオブジェクト」と「ノード」という用語は同じ意味で使用されています。
各コンポーネントのイベントの詳細については、コントロールにあるコンポーネントの説明部分、または『ActionScript 3.0 リファレンスガイド』のコントロールの項目を参照してください。
コンポーネントの起動ライフサイクルの詳細(起動ライフサイクルの主な事象など)については、『』のActionScript を使用した高度なビジュアルコンポーネントを参照してください。
他のコンテナやコントロールによって送出されたイベントを受け取るコンテナまたはコントロールを指定することができます。Adobe® Flash® Player によって Event オブジェクトが送出されると、その Event オブジェクトは表示リストのルートからターゲットノードまでの間を往復し、各ノードをチェックして登録されたリスナーがあるかどうかを調べます。「ターゲットノード」は、表示リスト内の、イベントが発生したノードです。例えば、ユーザーが Child1 という名前の Button コントロールをクリックすると、ターゲットノードとして定義された Child1 を含む Event オブジェクトが送出されます。
概念上、イベントフローは 3 つの部分に分けられます。つまり、キャプチャ段階、ターゲット段階、バブリング段階です。これらについては次に簡単に説明します。イベントフローの詳細については、イベントの伝播を参照してください。
イベントフローの最初の部分を「キャプチャ段階」と言います。この段階では、ルートノードからターゲットノードの親までのノードがすべて対象となります。この段階では、Flash Player によって各ノードがルートから順に確認され、イベントを処理するリスナーが登録されているかどうかがチェックされます。リスナーが登録されている場合は、Event オブジェクトの値が適切に設定され、そのリスナーが呼び出されます。このフローはターゲットノードの親に達するまで続き、親に登録されているリスナーが呼び出されると終わります。詳細については、キャプチャ段階を参照してください。
イベントフローの 2 番目の部分は「ターゲット段階」で、ここでは、ターゲットノードのみが対象となります。Flash Player は Event オブジェクトに適切な値を設定し、ターゲットノードにイベントリスナーが登録されているかどうかを調べて、それらのリスナーを呼び出します。詳細については、ターゲット段階を参照してください。
イベントフローの 3 番目の部分は「バブリング段階」で、ここでは、ターゲットノードの親からルートノードまでのすべてのノードが対象となります。Flash Player は、ターゲットノードの親から順に、適切な値を Event オブジェクトに設定して各ノードのイベントリスナーを呼び出します。最後にルートノードのリスナーが呼び出されて、このフローは終わります。バブリング段階の詳細については、バブリング段階を参照してください。
flash.events.Event クラスは、発生したイベントに関する情報を格納するためのプロパティを含む ActionScript クラスです。Event オブジェクトは、アプリケーションサーバーによって暗黙的に作成される JSP(JavaServer Page)の要求および応答オブジェクトと同様に、暗黙的に作成されるオブジェクトです。
Event オブジェクトは、イベントが送出されるたびに作成されます。イベントリスナー内で Event オブジェクトを使用すると、送出されたイベントの詳細や、イベントを送出したコンポーネントの詳細にアクセスできます。イベントリスナーに Event オブジェクトを渡して使用するかどうかは任意です。ただし、イベントリスナー内で Event オブジェクトのプロパティにアクセスする場合は、Event オブジェクトをリスナーに渡す必要があります。
Event オブジェクトは、イベントが送出されるときに 1 つだけ作成されます。バブリング段階およびキャプチャ段階で表示リストを上下に移動するときは、ノードごとに新しい Event オブジェクトが作成されるのではなく、特定の Event オブジェクトの値が変更されます。
flash.events.Event クラスを拡張するクラスが多数用意されています。ほとんどの場合、これらのクラスは次の 2 つのパッケージで定義されます。
mx.events パッケージでは、DataGridEvent、DragEvent、ColorPickerEvent などの Flex コントロール固有のイベントクラスが定義されています。flash.events パッケージでは、Flex に固有のイベントではなく、Flash Player によって定義されるイベントが定義されています。これらのイベントクラスには、MouseEvent、DataEvent、TextEvent などがあります。これらのイベントはどれも、Flex アプリケーションでよく使用されます。
これらのパッケージに加えて、独自のイベントオブジェクトを定義するパッケージもあります。例えば、mx.messaging.events.ChannelEvent や mx.logging.LogEvent などです。
Event クラスの子クラスには、その子クラスに固有の他のプロパティとメソッドが含まれています。汎用 Event オブジェクトではなく、特定のイベントタイプを使用して、これらの固有プロパティやメソッドにアクセスする必要がある場合があります。例えば LogEvent クラスには、Event クラスには含まれていない getLevelString() メソッドがあります。
Event サブクラスの使用の詳細については、イベントのサブクラスの使用を参照してください。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート