変数を使用すると、プログラムで使用する値を格納できます。変数を宣言するには、変数名を使用した var ステートメントを使用する必要があります。0 では、型注釈を使用する場合にのみ var ステートメントを使用する必要があります。0 では、常に var ステートメントを使用する必要があります。変数を宣言するときに var ステートメントを省略した場合、strict モードではコンパイルエラーが発生し、standard モードではランタイムエラーが発生します。たとえば、次のコード行は、変数 i があらかじめ定義されていない場合はエラーになります。
i; // があらかじめ定義されていない場合はエラー
変数をデータ型に関連付ける場合は、変数を宣言するときに行います。変数の型を指定しないで変数を宣言することができますが、strict モードではコンパイラ警告が生成されます。変数の型を指定するには、変数の名前にコロン (:) と変数の型を追加します。変数に値を割り当てるには、代入演算子 (=) を使用します。たとえば、次のコードは、変数 i を宣言し、その変数に値 20 を割り当てます。次の例のように、変数の宣言と同時に変数に値を割り当てる方が便利な場合があります。変数の宣言時に変数に値を割り当てる方法は通常、整数やストリングなどのプリミティブ値を割り当てる場合だけではなく、配列を作成する、またはクラスのインスタンスをインスタンス化する場合にも使用されます。次の例は、コードを 1 行使用して宣言され、値が割り当てられる配列を示します。クラスのインスタンスを作成するには、new 演算子を使用します。複数の変数を宣言する場合、カンマ演算子 (,) を使用して変数を区切ることで、コード 1 行ですべての変数を宣言することができます。たとえば、次のコードは、コード 1 行で 3 つの変数を宣言します。同じコード行で、各変数に値を割り当てることもできます。カンマ演算子を使用して変数宣言を 1 つのステートメントにまとめることができますが、コードが読みにくくなることがあります。
変数スコープについて
変数の "スコープ" とは、レキシカル参照によって変数にアクセスできるコードの範囲です。"グローバル" 変数は、コードのすべての範囲で定義される変数で、"ローカル" 変数は、コードの一部分でのみ定義される変数です。0 では、変数は常にその変数が宣言された関数またはクラスにスコープ設定されます。グローバル変数は、関数またはクラスの定義の外部で定義する変数です。たとえば、次のコードは、関数の外部で宣言して、グローバル変数 strGlobal を作成します。この例では、グローバル変数は関数定義の内部および外部の両方で利用できることを示します。ローカル変数を宣言するには、関数定義内で変数を宣言します。ローカル変数を定義できるコードの最小範囲が関数定義です。関数内で宣言されたローカル変数は、その関数内でのみ存在します。ローカル変数に使用した変数名がグローバル変数として宣言されている場合、ローカル変数がスコープ内にある間は、ローカル定義がグローバル定義を非表示に (シャドウ) します。ただし、グローバル変数は関数の外でも存在しています。関数内の trace ステートメントはこの変数のローカル値を出力しますが、関数の外にある trace ステートメントはこの変数のグローバル値を出力します。コードブロックは、左中括弧 ({) と右中括弧 (}) で囲まれたステートメントのグループです。C++ や Java などのプログラミング言語では、コードブロック内で宣言された変数は、コードブロック外では利用できません。このスコープ制限はブロックレベルのスコープと呼ばれますが、ActionScript にはありません。コードブロック内で変数を宣言すると、変数はそのコードブロック内だけではなく、コードブロックが属する関数の他の部分でも利用できます。たとえば、次の関数にはさまざまなブロックスコープで定義された変数が含まれています。すべての変数を関数全体で利用できます。ブロックレベルのスコープがないということは、関数が終了する前に変数が宣言されていれば、宣言される前に変数の読み書きが可能であるということです。これは、"ホイスト" と呼ばれる手法によるもので、コンパイラによりすべての変数宣言が関数の最上位に移動されます。しかし、コンパイラは代入ステートメントをホイストしません。つまり、次の例に示すように、変数が宣言される前でも変数に値を割り当てることができます。"デフォルト値" とは、値を設定する前に変数に格納されている値です。変数に初めて値を設定する場合は、変数を "初期化" します。変数を宣言して、値を設定しない場合、その変数は初期化されません。初期化されていない変数の値は、そのデータ型によって異なります。次の表に、データ型別の変数のデフォルト値を示します。
宣言されていない (型注釈 * と同じ)
ユーザー定義クラスを含むその他すべてのクラス
これは、IEEE-754 規格で定義されている特別な値で、数値を表さない値です。変数を宣言して、そのデータ型を宣言しない場合、デフォルトのデータ型 * が適用されます。これは、変数の型指定がないことを示します。また、型指定されていない変数を値で初期化しない場合、デフォルト値は undefined です。値 null をこれらの変数に割り当てようとすると、この値はそのデータ型のデフォルト値に変換されます。この関数は、変数が数値ではない場合はブール値 true を返し、それ以外の場合は false を返します。
データ型の詳細
0 では、32 ビット符号付および符号なし整数の低レベルマシン型にアクセスすることができるようになりました。変数が浮動小数点数を使用しない場合、Number データ型ではなく int データ型を使用する方が速く、効率的です。int データ型の変数のデフォルト値は 0 です。これは、String データ型および Object クラスを含む複合データ型を定義するすべてのクラスのデフォルト値です。このデータ型は、型注釈として使用することはできません。0 では、Number データ型は整数、符号なし整数、および浮動小数点数を表すことができます。ただし、パフォーマンスを最大化するために、32 ビット int および uint 型より大きい整数値に対してのみ、Number データ型を使用する必要があります。また、Number データ型には、浮動小数点数を格納することができます。浮動小数点数を格納するには、数値に小数点を含めます。小数点を省略すると、数値は整数として格納されます。この規格では、64 ビットを使用して浮動小数点数を格納する方法が指定されています。1 ビットを使用して数値が正か負かを指定します。11 ビットを 2 を底として格納される指数に使用します。残りの 52 ビットを使用して "仮数" を格納します。仮数とは指数で示される累乗される数値です。Number データ型では、ビットの一部を使用して指数を格納することで、仮数のビットすべてを使用する場合より大きな浮動小数点数を格納できます。この数値の範囲は非常に大きくなりますが、この範囲の問題は精度です。その結果、分数 1/3 など、正確に表すためには 53 ビット以上必要な数値は近似値にしかなりません。アプリケーションで 10 進法による絶対精度が必要な場合、2 進数浮動小数点計算ではなく、10 進法浮動小数点計算を実装するアプリケーションを使用する必要があります。Number データ型で整数値を格納する場合、仮数の 52 ビットだけが使用されます。たとえば、負の数値の平方根を計算しようとすると、その結果は NaN になります。その他の特別な Number 型の値には、正の無限大および負の無限大があります。ストリングは、Java プログラミング言語の場合と同様に不変値です。String 値を操作すると、ストリングの新しいインスタンスが返されます。値 null と空のストリング ("") は、両方とも文字が存在しないことを表しますが、同じものではありません。負以外の整数が必要な特別な場合に、uint データ型を使用します。たとえば、ピクセルカラー値を表すためには uint データ型を使用する必要があります。これは、int データ型にはカラー値の処理には適していない内部符号ビットがあるためです。型指定されていない変数には、undefined という値のみを割り当てることができます。型指定されていない変数は、型注釈がないか、型注釈にアスタリスク記号 (*) が使用されている変数です。void は戻り値の型注釈としてのみ使用することができます。1 つ目は、Object データ型は、型注釈のない変数に割り当てられるデフォルトのデータ型ではなくなりました。0 ではこれは行われず、真に型指定されていない変数の概念が導入されました。型注釈のない変数は、型が指定されていないと見なされます。コード内で変数の型を指定しないままにしておくことを明確に示す場合、型注釈に新しくアスタリスク記号 (*) を使用することができます。これは、型注釈を省略するのと同じことを示します。次の例は、型指定されていない変数 x を宣言する 2 つの同じステートメントを示します。型指定されていない変数にのみ値 undefined を割り当てることができます。型変換は、値が別のデータ型の値に変換されることです。型変換は、"暗黙的" または "明示的" に行うことができます。明示的な変換は、"キャスト" とも呼ばれ、コードであるデータ型の変数を別のデータ型に属している場合と同様に処理するようにコンパイラに指示されると実行されます。プリミティブ値が使用されている場合、キャストによって実際にあるデータ型の値が別のデータ型に変換されます。オブジェクトを異なる型にキャストするには、オブジェクト名を括弧で囲み、その前に新しい型の名前を置きます。たとえば、次のコードはブール値を整数にキャストします。
暗黙的な変換
明示的な変換
暗黙的な変換
暗黙的な変換は、次のような状況で実行時に行われます。
値が関数パラメータとして渡されるとき
関数から値が返されるとき
加算 (+) 演算子などの特定の演算子を使用した式内
ユーザー定義型の場合、変換される値が変換先のクラスまたは変換先のクラスから派生するクラスのインスタンスである場合に、暗黙的な変換は成功します。暗黙的な変換が成功しなかった場合は、エラーが発生します。たとえば、次のコードには、成功する暗黙的な変換と失敗する暗黙的な変換が含まれています。プリミティブ型の場合、暗黙的な変換は、明示的な変換関数によって呼び出される同じ内部変換アルゴリズムを呼び出して処理されます。以降のセクションでは、プリミティブ型の変換について詳しく説明します。
明示的な変換
strict モードでコンパイルする場合、型の不一致によるコンパイル時エラーを生成したくない場合があるため、明示的な変換、つまりキャストを使用すると便利です。これは、実行時に強制的に値が適切に変換されることがわかっている場合などです。たとえば、フォームから受信したデータを操作するとき、強制的にストリング値を数値に変換することができます。次のコードは、standard モードでコードは正しく実行されますが、コンパイル時エラーを生成します。strict モードを引き続き使用して、ストリングを整数に変換する場合、次のように明示的な変換を使用することができます。数字のみを含むストリング値は、数値型のいずれかに変換することができます。数値型では、負の数のように見えるストリングまたは 16 進数値 (たとえば、0x1A) を表すストリングも変換することができます。変換プロセスでは、ストリング値の先頭および末尾の空白は無視されます。Number() を使用して浮動小数点数のように見えるストリングをキャストすることもできます。小数点が含まれていると、uint() および int() は、小数点の後の数字が切り捨てられた整数を返します。たとえば、次のストリング値は数値にキャストすることができます。変換プロセスでは、先頭および末尾の空白は無視されますが、ストリング値に 2 つの数値を区切る空白がある場合は、0 または NaN が返されます。この関数では、先頭の 0 は無視されます。たとえば、次のコードは、異なるバージョンの ActionScript を使用してコンパイルされると、異なる出力を生成します。数値型の値が別の数値型の変数に割り当てられる場合、キャストは必要ありません。strict モードでも、数値型は別の数値型に暗黙的に変換されます。これは、場合によっては、型の範囲を超えると予期しない値になることを示します。次の例では、予期しない値が生成される場合もありますが、すべて strict モードでコンパイルされます。
データ型または値
つまり、ほとんどのデータ型とは異なり、strict モードのエラーを防ぐために Boolean 型へのキャストは必要ありません。次の例では、すべて strict モードでコンパイルされ、実行時に意図したとおりに動作します。次の表に、別のデータ型から Boolean データ型にキャストした結果の概要を示します。
データ型または値
数値データ型から String データ型にキャストすると、数値のストリング表現が返されます。Array クラスのインスタンスから String 型にキャストすると、すべての配列エレメントのカンマ区切りリストから構成されるストリングが返されます。たとえば、次の String データ型へのキャストは、配列の 3 つのエレメントすべてから成るストリングを 1 つ返します。Date クラスのインスタンスから String 型にキャストすると、インスタンスに含まれる日付のストリング表現が返されます。たとえば、次の例は Date クラスインスタンスのストリング表現を返します。この出力は、太平洋標準時の場合の結果を示します。次の表に、別のデータ型から String データ型にキャストした結果の概要を示します。
データ型または値
すべての配列エレメントで構成されるストリング
Date オブジェクトのストリング表現
数値のストリング表現
継承は、コード再利用の一形式であり、プログラマは既存のクラスを基に新しいクラスを開発することができます。既存のクラスは "基本クラス" または "スーパークラス" と呼ばれますが、新しいクラスは通常 "サブクラス" と呼ばれます。継承の主な利点は、既存のコードをそのまま維持しながら、基本クラスのコードを再利用できることです。さらに、継承では他のクラスが基本クラスとやり取りする方法を変更する必要がありません。入念にテストされたか、既に使用されている既存クラスを変更するのではなく、継承を使用することでそのクラスを追加プロパティまたはメソッドで拡張できる統合モジュールとして使用できます。このため、extends キーワードを使用して、クラスが別のクラスを継承することを示すことができます。継承を使用すると、コード内で "ポリモーフィズム" を利用することもできます。ポリモーフィズムを使用すると、異なるデータ型に適用された場合に異なる動作を実行するメソッドに単一のメソッド名を使用できます。継承では、サブクラスが基本クラスからメソッドを継承し再定義できるようにする、つまり "オーバーライド" を許可することで、ポリモーフィズムが有効になります。各クラスはデータ型を定義するため、継承を使用すると、基本クラスと基本クラスを拡張するクラスの特別な関係が作成されます。サブクラスは、基本クラスのすべてのプロパティを保有します。これは、サブクラスのインスタンスは常に基本クラスのインスタンスの代わりに使用できることを意味します。次に例を示します。
インスタンスプロパティと継承
メソッドのオーバーライド
継承されない静的プロパティ
静的プロパティとスコープチェーン
インスタンスプロパティと継承
インスタンスプロパティは、function、var、または const キーワードのいずれで定義されたかに関係なく、プロパティが基本クラスの private 属性で宣言されていない限り、すべてのサブクラスに継承されます。一部の型のイベントでは、Event クラスにイベントを定義するために必要なすべてのプロパティが含まれます。これらの型のイベントでは、Event クラスで定義されたもの以外のインスタンスプロパティは必要ありません。こうしたイベントの例として、データが正常にロードされたときに発生する complete イベント、ネットワーク接続が確立されたときに発生する connect イベントなどがあります。次の例は、サブクラスに継承されるプロパティおよびメソッドの一部を示す Event クラスからの抜粋です。プロパティが継承されるため、サブクラスのインスタンスはこれらのプロパティにアクセスできます。その他の型のイベントには、Event クラスで使用できない固有のプロパティが必要です。これらのイベントは、Event クラスで定義されたプロパティに新しいプロパティを追加できるように、Event クラスのサブクラスを使用して定義されます。こうしたサブクラスには、mouseMove イベント、click イベントなど、マウス操作またはマウスクリックに関連付けられているイベントに固有のプロパティを追加する MouseEvent クラスなどがあります。次の例は、サブクラスにあるが基本クラスにはないプロパティの定義を示す MouseEvent クラスからの抜粋です。
アクセス制御指定子と継承
プロパティが public キーワードで宣言された場合、このプロパティは任意の場所のコードから参照できます。プロパティが private キーワードで宣言された場合、このプロパティは定義されたクラス内でのみ参照でき、サブクラスに継承されません。protected キーワードは、プロパティが、定義されたクラス内だけでなくすべてのサブクラスからも参照できることを示します。0 の protected キーワードでは同じパッケージ内の他のすべてのクラスからプロパティを参照できるわけではありません。0 では、サブクラスのみが protected キーワードで宣言されたプロパティにアクセスできます。また、protected プロパティは、サブクラスが基本クラスと同じパッケージ内にあるか別のパッケージ内にあるかに関係なく、サブクラスから参照できます。プロパティが定義されているパッケージからのプロパティへの参照を制限するには、internal キーワードを使用するか、またはアクセス制御指定子を一切使用しないようにします。internal アクセス制御指定子は、アクセス制御指定子が指定されていないときに適用されるデフォルトのアクセス制御指定子です。internal とマークされたプロパティは、同じパッケージ内にあるサブクラスにのみ継承されます。次の例を使用して、各アクセス制御指定子がパッケージ境界を越えてどのように継承に影響するかを確認できます。コードがコンパイルおよび実行されるように、次の抜粋に示すように、str 変数は public として宣言されます。
変数のオーバーライド禁止
var または const キーワードで宣言されたプロパティは継承されますが、オーバーライドすることはできません。プロパティをオーバーライドすると、サブクラスでプロパティが再定義されます。オーバーライドできるプロパティの型は、メソッド、つまり function キーワードで宣言されたプロパティだけです。インスタンス変数をオーバーライドすることはできませんが、インスタンス変数の getter および setter メソッドを作成し、これらのメソッドをオーバーライドすることで、同じ機能を実現できます。
メソッドのオーバーライド
メソッドをオーバーライドすると、継承されたメソッドの動作が再定義されます。静的メソッドは継承されず、オーバーライドすることはできません。しかし、次の 2 つの条件が満たされている場合、インスタンスメソッドはサブクラスに継承され、オーバーライドできます。インスタンスメソッドが基本クラス内で final キーワードで宣言されていない。final キーワードがインスタンスメソッドで使用された場合、サブクラスによってメソッドがオーバーライドされないようにプログラマが意図的に指定したことを示します。インスタンスメソッドが基本クラス内で private アクセス制御指定子で宣言されていない。基本クラス内でメソッドが private としてマークされている場合、基本クラスのメソッドはサブクラスから参照できないため、サブクラス内で同じ名前のメソッドを定義するときに override キーワードを使用する必要はありません。上記の条件を満たすインスタンスメソッドをオーバーライドするには、サブクラス内のメソッドの定義は override キーワードを使用し、次の方法でメソッドのスーパークラスバージョンと一致する必要があります。オーバーライドメソッドには、基本クラスのメソッドと同じレベルのアクセス制御が必要です。internal とマークされたメソッドには、アクセス制御指定子を持たないメソッドと同じレベルのアクセス制御が必要です。オーバーライドメソッドには、基本クラスのメソッドと同じ数のパラメータが必要です。オーバーライドメソッドのパラメータには、基本クラスのメソッドのパラメータと同じデータ型注釈が必要です。オーバーライドメソッドには、基本クラスのメソッドと同じ戻り値の型が必要です。ただし、オーバーライドメソッドのパラメータの名前は、パラメータの数および各パラメータのデータ型が一致していれば、基本クラスのパラメータの名前と一致する必要はありません。
メソッドをオーバーライドするとき、多くのプログラマが、動作を完全に置き換えるのではなく、オーバーライドするスーパークラスメソッドの動作に追加したいと考えるでしょう
これには、サブクラス内のメソッドがそれ自体のスーパークラスバージョンを呼び出すメカニズムが必要です。super ステートメントは、直接のスーパークラスへの参照が含まれるそのようなメカニズムを提供します。スーパークラスで定義された変数をオーバーライドすることはできませんが、getter および setter をオーバーライドすることができます。
継承されない静的プロパティ
静的プロパティはサブクラスに継承されません。つまり、サブクラスのインスタンスから静的プロパティにアクセスすることはできません。静的プロパティは、そのプロパティが定義されたクラスオブジェクトからのみアクセス可能です。静的変数 test にアクセスするには、次のコードに示すように、クラスオブジェクトからアクセスする必要があります。静的プロパティと同じ名前を使用してインスタンスプロパティを定義することができます。このインスタンスプロパティは、静的プロパティと同じクラス内またはサブクラス内で定義できます。たとえば、前述の例の Base クラスでは、test というインスタンスプロパティを定義できます。次のコードはコンパイルおよび実行されます。これは、インスタンスプロパティが Extender クラスに継承されるからです。test インスタンス変数の定義が Extender クラスにコピーされるのではなく、移動された場合も、コードはコンパイルされ、実行されます。
静的プロパティとスコープチェーン
静的プロパティは継承されませんが、そのプロパティが定義されたクラスおよびそのクラスのサブクラスのスコープチェーン内にあります。このため、静的プロパティは、定義されたクラスおよびサブクラスの "スコープ内" にあると言います。つまり、静的プロパティが定義されたクラスおよびそのサブクラスの本体内から直接静的プロパティにアクセスできます。次の例では、前述の例で定義したクラスを変更して、Base クラスで定義された静的変数 test が Extender クラスのスコープ内にあることを示します。インスタンスプロパティが、同じクラスまたはスーパークラス内で静的プロパティと同じ名前を使用するように定義されている場合、インスタンスプロパティはスコープチェーン内で優先順位が高くなります。インスタンスプロパティは、静的プロパティを "シャドウする" と言います。これは、静的プロパティの値ではなくインスタンスプロパティの値が使用されることを意味します。たとえば、次のコードは、Extender クラスが test というインスタンス変数を定義すると、trace() ステートメントは、静的変数の値ではなくインスタンス変数の値を使用することを示します。0 を使用して次のようにオブジェクト志向の概念および機能をいろいろと適用できることがわかります。
クラスの定義
クラスの拡張
インターフェイスの定義、拡張、実装
さらに、クラスインスタンスを作成する "ファクトリメソッド" も含まれ、インターフェイスのインスタンスとして戻り値を宣言し、戻されたオブジェクトを汎用的な方法で使用する方法が示されます。アプリケーションは、次のファイルで構成されています。
すべての GeometricShapes アプリケーションクラスによって実装されるメソッドを定義する基本インターフェイス
複数の辺を持つ GeometricShapes アプリケーションクラスによって実装されるメソッドを定義するインターフェイス
図形の中心をめぐって対称の位置に長さの等しい複数の辺を持つ図形のタイプ
円を定義する一種の幾何学図形
指定されたシェイプ種類およびサイズでシェイプを作成するためのファクトリメソッドを含むクラス
インターフェイスでの一般的な動作の定義
シェイプクラスの定義
ポリモーフィズムとファクトリメソッド
サンプルアプリケーションの機能拡張
GeometricShapes アプリケーションを使用するユーザーは、幾何学図形の種類とサイズを指定することができます。それに対しアプリケーションは、シェイプの説明、その面積、および周辺の長さで応答します。アプリケーションユーザーインターフェイスは、シェイプの種類を選択、サイズを設定、説明を表示するための小数のコントロールを含み、ごく普通です。このアプリケーションで最も興味深い部分は、内部にありそれはクラスおよびインターフェイス自体の構造に関係します。このアプリケーションは幾何学図形を扱いますが、それを図では表示しません。
インターフェイスでの一般的な動作の定義
このインターフェイスでは getArea() メソッドと describe() メソッドの 2 つのメソッドを定義し、前者のメソッドはシェイプの面積を計算して返し、後者のメソッドはシェイプのプロパティのテキスト説明を組み立てます。各シェイプの周囲の長さを知りたいこともあります。ただし、円の周囲は円周と呼ばれ、その計算方法は固有であるため、三角形または正方形とは動作が異なります。それでも、三角形、正方形、およびその他の多角形の間には十分に類似点があるため、それらに新しいインターフェイスクラスの IPolygon を定義することは意味があります。IPolygon インターフェイスも、次に示すように、どちらかと言えば単純です。
シェイプクラスの定義
各種類のシェイプに共通するメソッドに関する考えがまとまったら、シェイプクラス自体を定義することができます。実装する必要のあるメソッドの数で見た場合、最も単純なシェイプはここに示すように、Circle クラスです。残りの 2 つの種類のシェイプの正方形および等辺三角形には、それぞれ等しい長さの辺を有するので、どちらも共通の式を使用して周辺と内角の総和を計算できるという共通点があります。実際、これらの共通の式は、今後定義する必要がある他の正多角形にも適用されます。スーパークラスを使用すると、共通メソッドを 1 か所で定義することできるため、サブクラスごとに別々に共通メソッドを定義する必要がありません。
// このメソッドはサブクラスでオーバーライドが必要
getArea() メソッドの式はシェイプによって異なるため、基本クラスバージョンのメソッドは、サブクラスメソッドで継承可能な共通の論理を含むことができません。代わりに、面積を計算しなかったことを示すには、単にデフォルト値 0 を返します。
/* シェイプの名前で開始し、残りの説明を
getArea() メソッドが呼び出されると、前記のコードの式を使用して面積が計算されます。getArea() メソッドのコードが実行されることは決してありません。ここでは Square クラスについて詳細は説明しません。
ポリモーフィズムとファクトリメソッド
インターフェイスと継承を有効に利用するクラスセットは、いろいろな興味深い方法で使用することができます。たとえば、これまでに説明したすべてのシェイプクラスは、IGeometricShape インターフェイスを実装するか、またはそのようにスーパークラスを拡張します。次のコードは、この働きを示します。この例は、ポリモーフィズムの動作原理を示しています。つまり、正確に同じメソッド呼び出しの場合も、メソッドが呼び出されるオブジェクトのクラスに応じて、実行されるコードは異なることになります。GeometricShapes アプリケーションでは、この種類のインターフェイスベースのポリモーフィズムを適用するために、ファクトリメソッドとして知られている簡略化バージョンの設計パターンを使用します。"ファクトリメソッド" という用語は、基礎になるデータ型または内容が状況によって変わる可能性のあるオブジェクトを返す関数を指します。createShape() ファクトリメソッドを使用すると、作成するインスタンスの詳細をシェイプクラスのコンストラクタで定義することができます。もっと一般的な方法でアプリケーションが扱えるように、IGeometricShape インスタンスとして新しいオブジェクトを返します。前述の例の describeShape() メソッドは、もっと具体的なオブジェクトへの汎用的な参照を取得するために、アプリケーションでファクトリメソッドをどのように使用することができるかを示しています。次のように、新しく作成された Circle オブジェクトの説明を取得することができます。
サンプルアプリケーションの機能拡張
インターフェイスおよび継承の実際の威力は、アプリケーションを機能拡張または変更したときに明らかになります。新しいシェイプとして五角形をこのサンプルアプリケーションに追加するとします。次に、アプリケーションのユーザーインターフェイスのコンボボックスに新しい Pentagon オプションを追加します。しかし、これで全部です。つまり、GeometricShapeFactory クラスのいずれのメソッドも変更する必要がないので、新しい種類のシェイプを必要なときに追加することが非常に簡単になります。実習として Pentagon クラスを Geometric Shapes の例に追加してみると、アプリケーションに新機能を追加する負荷がインターフェイスおよび継承によってどの程度軽減できるかがわかります。
コンテンツの動的ロード
0 アプリケーションにロードできます。これらのアセットをロードするには、Loader クラスを使用します。Loader オブジェクトを使用して、アプリケーションに SWF ファイルおよびグラフィックファイルをロードします。Loader オブジェクトには、表示リスト内の子表示オブジェクト、つまりロードされる SWF ファイルまたはグラフィックファイルを表す表示オブジェクトを 1 つだけ含むことができます。表示リストに Loader オブジェクトを追加するときは、次のコードのように、子表示オブジェクトのロードが完了したら、ロードされた子表示オブジェクトも表示リストに追加します。このオブジェクトは、Loader オブジェクトおよびロードされた表示オブジェクト両方のプロパティです。LoaderInfo クラスは、ロードの進行状況、ロードする側とロードされる側の URL、メディアの総バイト数、メディアの規格高さと幅などの情報を提供します。LoaderInfo オブジェクトは、ロードの進行状況を監視するためのイベントも送出します。ロードされたコンテンツのプロパティにアクセスするには、次のコードのように、LoaderInfo オブジェクトにイベントリスナーを追加します。詳細については、「イベントの処理」を参照してください。このオブジェクトは、SWF ファイルのメインクラスのインスタンスや Loader オブジェクトに使用されるほか、Loader オブジェクトによってロードされたオブジェクトにも使用されます。LoaderContext クラスには、ロードされたコンテンツの使用方法のコンテキストを定義できる次の 3 つのプロパティが含まれています。
このプロパティを true に設定すると、Loader によってオリジンサーバーでクロスドメインポリシーファイルの有無がチェックされます (Web サイトの管理 (クロスドメインポリシーファイル)参照)
これは、Loader オブジェクトを含む SWF ファイルのドメイン以外のドメインにあるコンテンツにのみ必要です。draw() コマンドを使用して、ロードされたイメージ内のデータにアクセスできます。Loader オブジェクトを含むファイルのドメイン以外のドメインの SWF ファイルに対してこのプロパティを指定します。このオプションを指定すると、Flash Player はクロスドメインポリシーファイルが存在するかどうかをチェックします。ファイルが存在する場合は、クロスドメインポリシーファイルで許可されているドメインの SWF ファイルはロードされた SWF コンテンツをクロススクリプトできます。0 で記述された SWF ファイルをロードする場合にのみ、このプロパティを使用します。ロードされた SWF ファイルを同じアプリケーションドメインに置くと、そのクラスに直接アクセスできます。これは、関連付けられたクラス名を使用してアクセスできる埋め込みメディアを含む SWF ファイルをロードする場合に便利です。次に、別のドメインからビットマップをロードするときに、クロスドメインポリシーファイルの有無をチェックする例を示します。
次に、SWF ファイルを Loader オブジェクトと同じセキュリティサンドボックスに置くために、別のドメインから SWF ファイルをロードするときに、クロスドメインポリシーファイルの有無をチェックする例を示します。また、このコードは、ロードされた SWF ファイルのクラスを Loader オブジェクトと同じアプリケーションドメインに追加します。ここでは CustomErrors アプリケーションを使って、アプリケーション構築時のカスタムエラーを操作するテクニックについて示します。扱うテクニックは次のとおりです。
カスタムエラーの記述
カスタムエラーのスロー
エラースロー時のユーザーへの通知
アプリケーションは、次のファイルで構成されています。
MXML ユーザーインターフェイスを構成するメインアプリケーション
アプリケーションによるスローの可能性がある FatalError エラーを定義するクラス
ユーザー指定の従業員 XML パケットを検証する単一のメソッドを定義するクラス
カスタムバリデータの構築
mxml ファイルは、カスタムエラーアプリケーション用のユーザーインターフェイスと一部のロジックを含みます。このため、再検証を試みる前に XML パケットを変更できます。XML パケットが有効な場合、Label コンポーネントインスタンス status が成功メッセージを表示して、アプリケーションが終了します。これらの各メソッドは、適切なメッセージを Alert コンポーネントに表示して、発生した具体的なエラーをユーザーに通知します。致命的なエラーではなく警告エラーが発生した場合は、そのエラーメッセージが Alert コンポーネントに表示されますが、TextField および Button コンポーネントインスタンスは無効になりません。このメッセージでは、XML の検証を続行するかスクリプトを中止するかの質問もユーザーに表示します。警告エラーで Yes をクリックしてユーザーがスクリプトの中止を選択した場合は、FatalError がスローされ、その結果アプリケーションは終了します。
カスタムバリデータの構築
検証のため、従業員は 1 つ (1 つのみ) の原価部門に属していなければなりません。
XML バリデータの最終チェックは、ユーザーに定義されている社会保障番号が厳密に 1 つであることの確認です (XML パケットの ssn ノード)
たとえば、ssn ノードに格納されている番号が有効であることの確認をするためであったり、従業員に少なくとも 1 つの電話番号と電子メールアドレスを割り当て、その両方の値が有効であることを確認するためであったりします。各従業員に一意の ID を割り当てその上司の ID を指定するために、XML を変更することもできます。エラー ID、重大度、独自のエラーコードおよびメッセージを格納する XML オブジェクトなどを定義します。このクラスでは、エラーの種類ごとの重大度を定義するのに使用する 2 つの静的定数も定義します。XML オブジェクトの各エラーノードは、一意の数値コードとエラーメッセージを格納します。id パラメータには、調べるエラーのエラーコードを指定します。たとえば、id を 9001 で渡すと、「従業員は 1 つのみの原価部門に割り当てなければならない」ことを示すエラーを受け取ります。このクラスの次のメソッドである getTitle() はパラメータを 1 つも受け取らず、この特定のエラーのエラー ID を格納するストリング値を返します。この値は Alert コンポーネントのタイトルで使用すると、XML パケットの違反時に発生した正確なエラーを簡単に識別するのに役立ちます。このメソッドは、エラーメッセージの表現をカスタマイズするために、Error クラスに定義されている関数をオーバーライドします。発生した特定のエラー番号とメッセージを識別するストリングを返します。
0 の基本データ型およびコアクラス > 正規表現の使用
正規表現の使用
正規表現とは、ストリング内で条件に一致するテキストの検索および操作に使用するパターンの表記法です。正規表現はストリングのように見えますが、その内容には、パターンや繰り返しを表す特殊なコードが含まれています。たとえば、次の正規表現は、先頭が A であり、その後に 1 桁以上の数字が続くようなストリングに一致します。正規表現では、複雑なパターンや解読困難なパターンが使用されることもあります。たとえば、次の正規表現は有効な電子メールアドレスに一致します。この章では、正規表現を作成するための基本的なシンタックスについて説明します。正規表現には複雑な要素や微妙に意味が異なる機能が数多く存在するため、詳細については、Web や書籍で他の参考資料を参照してください。ただし、プログラミング環境が異なると正規表現の実装も異なっている場合があるため注意が必要です。これらのメソッドの詳細については、ストリング内のパターンの検索およびサブストリングの置換を参照してください。
正規表現の概要
正規表現のシンタックス
ストリングに対して正規表現を使用するメソッド
0 の基本データ型およびコアクラス > 正規表現の使用 > 正規表現のシンタックス > 繰り返し制御文字
繰り返し制御文字
繰り返し制御文字は、パターンの中で文字またはシーケンスの繰り返しを指定するために使用します。次に例を示します。
繰り返し制御のメタ文字
直前のアイテムについて 0 回以上の繰り返しに一致します。直前のアイテムについて 1 回以上の繰り返しに一致します。直前のアイテムについて 0 回または 1 回だけ一致します。直前のアイテムについて、繰り返し回数または回数の範囲を指定します。次のように、繰り返し制御文字は単一の文字に適用することも、グループに適用することもできます。繰り返し制御文字をグループ化括弧内で使用すると、グループに繰り返し制御を適用できます。デフォルトでは、正規表現は "最長一致" の検索ロジックを使用します。
すなわち、正規表現に含まれる各サブパターン (* など) について、ストリング内で可能な限り多くの文字に一致する方法を探し、それから正規表現内の次の部分に処理を移します。たとえば、次のような正規表現とストリングがあるとします。この正規表現はストリング全体に一致します。</p> グループのみに一致させることが本来の目的であることもあります。その場合は次のようにします。任意の繰り返し制御文字の直後に疑問符 () を付けると、その繰り返し制御文字は、"最短一致" の検索ロジックを使用するように動作が変更されます。
たとえば、次の正規表現では、*
という最短一致の繰り返し制御を使用しています。これは、<p> と最小限の文字の後に </p> が続くストリングに一致します。繰り返し制御文字については、次の点に注意してください。{0} または {0,0} と指定しても、対象のアイテムが一致から除外されるわけではありません。/abc+*/ のように複数の繰り返し制御文字を重複して指定することはできません。) に * などの繰り返し制御を付けても、s (dotall) フラグを設定しない限り複数行にわたって一致することはありません。たとえば、次のようなコードがあるとします。
0 の基本データ型およびコアクラス > 正規表現の使用 > 正規表現のシンタックス > フラグとプロパティ
フラグとプロパティ
次の表に、正規表現に対して設定できる 5 種類のフラグを示します。各フラグには正規表現オブジェクトのプロパティとしてアクセスできます。複数箇所に一致します。一致の判定において大文字と小文字を区別しません。このフラグを設定した場合、$ および ^ はそれぞれ行末と行頭にも一致します。
このフラグを設定した場合、正規表現の拡張機能を有効にします。パターンの一部と見なされない空白を正規表現の中に挿入できるようになります。これにより、正規表現コードの読みやすさを向上できます。これらのプロパティは読み取り専用です。しかし、名前付きプロパティの値を直接設定することはできません。たとえば、次のコードではエラーが発生します。デフォルトでは、正規表現の宣言内で指定しない限りフラグは設定されず、対応する各プロパティの値は false となります。正規表現には上記の他にも、次の 2 つのプロパティがあります。source プロパティは、正規表現の中でパターンを定義する部分のストリングを示します。g (global) フラグを設定しない場合、正規表現が複数の場所に一致することはありません。// 同じパターンだが、今度は g フラグを設定する。正規表現の一致を判定する際、デフォルトでは大文字と小文字が区別されますが、i (ignoreCase) フラグを設定した場合は大文字と小文字が区別されません。たとえば、次の正規表現に含まれている小文字の s は、ストリングの先頭にある大文字の S には一致しません。この正規表現に i フラグを設定すると、大文字の S にも一致するようになります。m フラグを設定した場合、これらの文字はそれぞれ行頭と行末にも一致します。次の例では、ストリング内に改行文字が含まれています。したがって、結果の出力は次のようになります。次の例も同じコードですが、今度は m フラグを設定しています。この場合、出力にはそれぞれの行頭にある単語が含まれます。次の文字は行末と見なされません。したがって、次の例では一致する場所がありません。s フラグを設定すると、ドットが改行文字にも一致するようになります。この場合は、<p> タグに囲まれたサブストリング全体 (改行文字を含む) に一致します。複雑な正規表現は解読することが困難です。特に、メタ記号やメタシーケンスを多用するとパターンが非常に難解になります。次に例を示します。正規表現に x (extended) フラグを設定した場合、パターン内に入力した空白文字がすべて無視されます。たとえば、次の正規表現は前の例と同等です。x フラグを設定している場合に空白文字の一致を調べるには、その空白文字の直前に円記号を付けます。たとえば、次の 2 つの正規表現は同等です。lastIndex プロパティは、ストリング内で次回の検索を開始するインデックス位置を示します。たとえば、次のようなコードがあるとします。lastIndex プロパティは、デフォルトでは 0 (ストリングの先頭から検索を開始) に設定されていますが、検索を実行するたびに、一致した場所に続くインデックス位置に設定されます。したがって、前の例で示したコードの出力は次のようになります。lastIndex プロパティに値を設定すれば、ストリング内で正規表現による検索を開始する位置を変更できます。source プロパティは、正規表現の中でパターンを定義する部分のストリングを示します。次に例を示します。この単純な Wiki テキスト変換の例で、正規表現の使用方法をいくつか示します。ソースの Wiki パターンに一致するテキスト行を適切な HTML 出力ストリングに変換する。
正規表現を使用して、米ドルストリング ("$9
アプリケーションは、次のファイルで構成されています。
正規表現を使用して Wiki 入力テキストパターンを同等の HTML 出力に変換するメソッドが含まれているクラス
正規表現を使用して URL ストリングを HTML の <a> ハイパーリンクタグに変換するメソッドが含まれているクラス
正規表現を使用して米ドルストリングをユーロストリングに変換するメソッドが含まれているクラス
米ドルストリングからユーロストリングへの変換
この Wiki 変換アプリケーションは堅牢ではありませんが、パターンマッチングおよびストリング変換を行う正規表現の使用方法を示します。このメソッドは、他の複数のメソッドを呼び出し、結果の HTML ストリングを組み立てます。
ボールドおよびイタリックのパターンの変換
正規表現の (繰り返し制御文字を使用すると、最短一致でマッチングが行われます。''' パターンで開始し、終了するストリング全体ではありません。正規表現内の括弧は、キャプチャグループを定義します。
箇条書きパターンの変換
正規表現の先頭の ^ 記号は、行の先頭に一致します。
\* パターンは、アスタリスク文字に一致します (* 繰り返し制御文字ではなく、リテラルのアスタリスクであることを示すために、円記号を使用します)
正規表現内の括弧は、キャプチャグループを定義します。メソッド内の次の行によって、入力 Wiki ストリングから空の行を削除します。正規表現の ^ 記号は行の先頭に一致し、$ 記号は行の末尾に一致します。正規表現で m (multiline) フラグを使用した場合、^ 記号は単純にストリングの先頭ではなく、行頭とマッチングされます。これらの要素部分は、正規表現パターンの一部を定義するストリングです。記号で示され、非キャプチャグループを定義します。これは、括弧が | 選択制御パターン用のグループの定義にのみ使用されるという意味です。正規表現のその他の要素部分は、それぞれキャプチャグループを使用し (パターン内の括弧で示されます)、replace() メソッドの置換ストリングの後方参照コード ($1、$2、$3) で使用されます。+ 繰り返し制御文字は、少なくとも 1 つの文字に一致することを示します。
は、必須のドット () 文字を示します。リングに一致します。) 文字に一致します。
* 繰り返し制御文字は、0 個以上の文字が
一致することを示します。replace() メソッドの呼び出しでは、正規表現を使用し、後方参照を使用して置換 HTML ストリングが組み立てられます。このメソッドは、似た手法を使用して、電子メールパターンを HTML の <a> ハイパーリンクストリングに置き換えます。このサンプルファイルで HTTP、FTP、および電子メールの URL とのマッチングに使用する正規表現は、例を示すことが目的なので単純化されています。より正確にこれらの URL とマッチングするには、より複雑な正規表現を使用します。
米ドルストリングからユーロストリングへの変換
最初の行で、米ドルストリングに一致する単純なパターンを定義します。$ 文字の前にバックスラッシュ (\) エスケープ文字が付いていることに注意してください。関数名を replace() メソッドの第 2 パラメータとして使用すると、次の要素がパラメータとして呼び出し元関数に渡されます。
ストリング内の一致する部分
グループ化括弧によってキャプチャされた一致
この方法で渡される引数の数は、グループ化括弧によってキャプチャされた一致数によって異なります。
グループ化括弧によってキャプチャされた一致数は、関数コード内の arguments
ストリング内で一致部分が始まる場所のインデックス位置
これは、米ドルストリングの数字の部分、つまり $ 記号のないドル金額です。
メソッドは、為替レート変換を適用し、結果のストリングを返します (前に $ 記号を付ける代わりに、後ろに € 記号を付けます)
イベントリスナーとは、特定のイベントに応答して Flash Player により実行される関数のことであり、イベントハンドラとも呼ばれます。イベントリスナーを登録するには 2 つの手順を実行します。まず、目的のイベントに応答して Flash Player に実行させるための関数またはクラスメソッドを作成します。これは、リスナー関数またはイベントハンドラ関数と呼ばれることもあります。次に addEventListener() メソッドを使用して、そのリスナー関数を、イベントのターゲットまたは該当するイベントフローに含まれる任意の表示リストオブジェクトに登録します。
リスナー関数の作成
イベントリスナーの管理
エラーイベントのリスナーを登録しない場合
リスナー関数の作成
0 のイベントモデルのうち、リスナー関数の作成に関する部分は DOM イベントモデルに準拠していません。DOM イベントモデルでは、イベントリスナーとリスナー関数が明確に区別されています。DOM イベントモデルにおいては、リスナー関数自体を登録するのではなく、リスナー関数を含んだクラスインスタンスを登録する形式をとります。0 のイベントモデルには、イベントリスナーとリスナー関数との区別がありません。また、リスナー関数の名前が handleEvent() である必要はなく、識別子として有効な任意の名前を付けることができます。0 においては、リスナー関数自体の名前を登録する形式をとります。
クラス外に定義したリスナー関数
次のコードは、赤い正方形のシェイプを表示する単純な SWF ファイルです。クラス内にある clickHandler() というリスナー関数で、赤い正方形に対するマウスクリックイベントを受け付けます。これにより、リスナー関数の中でイベントオブジェクトを調べることができます。この例では、イベントオブジェクトの type プロパティを使用し、イベントがクリックイベントであることを確認しています。また、この例では this キーワードの値も確認しています。this はグローバルオブジェクトを参照しています。なぜなら、リスナー関数をカスタムクラスやオブジェクトに属さない外部で定義しているからです。
クラスメソッドとして定義したリスナー関数
0 とは異なります。addEventListener() に対してクラスメソッドを指定した場合、リスナーメソッドのスコープは、メソッドが定義されているクラスではなくイベントをブロードキャストしたコンポーネントに基づいて決まるようになっていました。0 で使用したとすると、this キーワードは、ChildSprite インスタンスではなくイベントをブロードキャストしたコンポーネントを参照することになります。この従来の仕様では、リスナーメソッドからそのメソッドがあるクラス内の他のメソッドやプロパティにアクセスできないため、場合によっては非常に大きな問題が生じていました。Delegate クラスを使用してリスナーメソッドのスコープを変更するという方法が用意されていました。
望ましくないイベントリスナー登録の方法
第 3 のテクニックとして、汎用オブジェクトを作成し、そのオブジェクトのプロパティによって動的にリスナー関数を割り当てる方法がありますが、これを使用することはお勧めできません。0 で一般的に使用されていたという理由からです。0 では使用しないでください。このテクニックでは this キーワードの参照先がリスナーオブジェクトではなくグローバルオブジェクトになるため、望ましくありません。トレースの結果は次のようになります。になっていますが、実際の参照先はグローバルオブジェクトです。
イベントリスナーの管理
0 バージョンです。IEventDispatcher という名前からは、Event オブジェクトを送信 (送出) することが主な目的であるように思われますが、実際には、イベントリスナーを登録、確認、および削除する目的でメソッドを使用する機会が最も多いといえます。このクラスは、イベントフローの一部やイベントターゲットとして機能するすべてのクラスに対する基本クラスです。
イベントリスナーの追加
リスナー関数を登録する際にはこのメソッドを使用します。type パラメータでは、イベントのタイプを指定します。listener パラメータでは、目的のイベントが発生したときに実行するリスナー関数を指定します。listener パラメータには、関数への参照またはクラスメソッドへの参照のいずれかを指定できます。listener パラメータを指定するときは括弧を使用しないでください。useCapture に false を指定すると、そのリスナーはイベントフローのターゲット段階とバブリング段階でアクティブになります。0 で独自に提供されているパラメータです。デフォルト値は 0 ですが、負の整数値または正の整数値を指定することができます。指定した数値が高いほど、イベントリスナーが早い順序で実行されます。同じ優先度で登録された複数のイベントリスナーがある場合、それらは登録順に実行されます。つまり、先に登録したイベントリスナーほど早く実行されます。useWeakReference パラメータを使用すると、そのリスナー関数に対する参照を通常の参照にするか、弱参照にするかを指定できます。このパラメータに true を指定すると、リスナー関数が使用されなくなった後もメモリ上に残り続けるのを防ぐことができます。Flash Player では、"ガベージコレクション" というテクニックによって、使用されなくなったオブジェクトをメモリから削除します。あるオブジェクトに対して参照が 1 つも存在しなくなったとき、そのオブジェクトはもう使用されないと見なされます。弱参照はガベージコレクションのシステムで無視されるため、弱参照による参照しか受けていないリスナー関数はガベージコレクションの対象となります。
イベントリスナーの削除
不要になったリスナーは削除することをお勧めします。
イベントの送出
dispatchEvent() メソッドは、独自のイベントオブジェクトをイベントフローに送出する場合に使用する上級開発者向けのメソッドです。このメソッドに指定できるパラメータは 1 つだけで、Event クラスまたはそのサブクラスのインスタンスを指定します。
既存のイベントリスナーの確認
IEventDispatcher インターフェイスが備える残り 2 つのメソッドは、イベントリスナーの存在に関する有用な情報を取得するために使用します。ただし、willTrigger() では指定した表示オブジェクト自体を確認するだけでなく、イベントフローのすべての段階におけるその表示リストオブジェクトの祖先もすべて確認します。
エラーイベントのリスナーを登録しない場合
0 における最も重要なメカニズムはイベントではなく例外ですが、非同期の操作 (ファイルのロードなど) には例外処理を使用できません。非同期の操作を実行中にエラーが発生すると、Flash Player によりエラーイベントオブジェクトが送出されます。エラーイベントに対するリスナーを作成していない場合、デバッグ版の Flash Player では、発生したエラーに関する情報がダイアログボックスに表示されます。たとえば、ファイルのロード処理において無効な URL を指定すると、デバッグ版 Flash Player では、エラーを示すこのダイアログボックスが表示されます。エラーイベントが発生しても、それによって SWF ファイルの実行が停止することはありません。単に、デバッグ版のブラウザプラグインまたはスタンドアローンの Player ではダイアログボックスによって、オーサリング環境の Player では出力パネルのメッセージによって、また、Adobe Flex Builder 2 ではログファイルのエントリによって、エラーの情報が示されるだけです。Alarm Clock の例は、アラームが鳴り出す時刻をユーザーが指定できる時計と、その時刻に表示されるメッセージで構成されます。0 によるイベント処理のいくつかの側面を示します。
イベントのリスンと応答
リスナーへのイベントの通知
カスタムイベントタイプの作成
アプリケーションには次のファイルが含まれます。
単純な時刻合わせ機能を持つ時計インターフェイスコンポーネント (SimpleClock の例で説明)
アラームのトリガ
他へのアラームの通知
カスタムアラームイベントの提供
この例の時計の主な機能である時刻の追跡と文字盤の表示などは、例 : 単純なアナログ時計で説明した SimpleClock アプリケーションのコードを再利用しています。イベントが作成された目的は、何かが発生したときの通知を行うためです。
アラームのトリガ
既に説明したように、AlarmClock クラスが実際に提供する機能は、アラームの設定とトリガに関する機能だけです。Timer) を使用して、指定された時間が経過した後で実行するようにコードを定義できます。まず、Timer インスタンスが 0 ミリ秒待機し、タイマーイベントを 1 回だけトリガするように指示するパラメータを使用して、変数をインスタンス化します。指定された時間が経過した後、timer イベントを送出することで、Timer インスタンスが動作します。* アラームを鳴らす時刻を設定する。
* パラメータ message は、アラームが鳴り出したときに表示するメッセージ
* 戻り値は、アラームが鳴り出す時刻
// 今日の日付でこの時刻を作成
// 今日、指定された時刻が既に過ぎているかどうかを判断
// 現在設定されている場合、アラームタイマーを停止
// アラームを鳴らすまでに経過する時間を計算
// (アラーム時刻と現在時刻の差) をミリ秒単位で計算し、// アラームタイマーの遅延として設定
このメソッドは、アラームメッセージの保存、アラームを鳴らす時刻の実際の瞬間を表す Date オブジェクト (alarmTime) の作成など、複数の処理を実行します。この章と最も関係がある部分として、メソッドの最後の数行で、alarmTimer 変数のタイマーが設定され、アクティブ化されます。まず、reset() メソッドが呼び出され、タイマーが停止され、既に実行されていた場合はリセットされます。次に、現在時刻 (now 変数で表現) が alarmTime 変数の値から減算され、アラームを鳴らすまでに経過する時間がミリ秒単位で決定されます。最後に start() メソッドが呼び出され、タイマーが実際に開始されます。* timer イベントが送出されたときに呼び出される。イベントリスナーとして登録されているメソッドは、適切なシグネチャ (メソッドのパラメータと戻り値の型のセット) で定義されている必要があります。Timer インスタンスはイベントリスナーを呼び出すときに、TimerEvent インスタンスをイベントオブジェクトとして渡します。
他へのアラームの通知
Timer クラスと同様に、AlarmClock クラスはイベントを提供し、これによってアラームが鳴り出すときに他のコードが通知を受信できます。すなわち、AlarmClock クラスには、既に独自のイベントを提供する組み込み機能があります。
カスタムアラームイベントの提供
すべてのイベントリスナーが、トリガされる特定のイベントに関する情報が設定されているイベントオブジェクトパラメータを受け取ります。多くの場合、イベントオブジェクトは Event クラスのインスタンスです。ただし、場合によっては、追加の情報をイベントリスナーに提供すると便利なことがあります。この章で既に説明したように、一般的にはこれを実現するために、新しいクラス (Event クラスのサブクラス) を定義し、このクラスのインスタンスをイベントオブジェクトとして使用します。* このイベントオブジェクトと共にイベントハンドラに渡すことができる。カスタムイベントオブジェクトクラスを作成する最適な方法は、前の例で示したように、Event クラスを拡張するクラスを定義することです。継承された機能を補うために、AlarmEvent クラスでは、イベントに関連付けられたアラームメッセージのテキストを含むプロパティ message を定義しています。Event サブクラスでは、オプションで、toString() メソッドが呼び出されたときに返される値にカスタムイベントのプロパティを含めるように、継承された toString() をオーバーライドすることもできます。* 現在のインスタンスのコピーを作成して返す。
* 戻り値は、現在のインスタンスのコピー
* 戻り値は、現在のインスタンスのストリング表現
オーバーライドされた clone() メソッドは、現在のインスタンスと一致するようにすべてのカスタムプロパティが設定されているカスタム Event サブクラスの新しいインスタンスを返す必要があります。いずれの場合も、呼び出される側のコードに情報が送信され、その結果が呼び出し側コードに返されます。これらのプロパティとメソッドは、外部インターフェイス接続に関する情報を取得し、コンテナ内のコードを ActionScript から実行し、コンテナから ActionScript 関数を呼び出せるようにするために使用されます。
外部コンテナに関する情報の取得
外部インターフェイスが提供されている場合、このプロパティは true になります。ExternalInterface クラスの他の機能を使用する前に、現在のコンテナにおいて外部インターフェイスによる通信がサポートされているかどうかを、次のようにして必ず確認してください。現在使用しているブラウザの設定で JavaScript が有効化されているかどうかは確認できません。call() メソッドでは、コンテナアプリケーション内のコードが実行されます。パラメータは最低 1 つ必要で、コンテナアプリケーション内で呼び出される関数の名前を含んだストリングを指定します。call() メソッドに渡された追加パラメータは、関数呼び出しのパラメータとしてコンテナに渡されます。
// 2 つのパラメータを渡して、その関数の結果を
コンテナは、イベントオブジェクトの request プロパティでその情報にアクセスし、それを使用して自身のコードの実行方法を判定できます。コンテナが Web ブラウザでも、その他の ActiveX コンテナでも、呼び出しが失敗した場合やコンテナ側のメソッドが戻り値を返さなかった場合は、null が返されます。1 つはストリングの関数名で、コンテナはその名前で関数を認識します。これらの名前は区別されるため、実際の ActionScript 関数が異なる名前であっても、コンテナで使用される関数名を指定できます。このことは、匿名関数が指定された場合や、呼び出される関数が実行時に決定される場合など、関数名が不明な場合に非常に役立ちます。その方法は、コンテナのタイプによって異なります。つまり、パラメータが渡され、呼び出されたローカル関数から結果が返されます。あるいは、埋め込み ActiveX コントロールを実行している SWF ファイルの関数を呼び出すときに、登録された関数名およびすべてのパラメータが XML フォーマットストリングに直列化されている必要があります。0 の基本的なプログラミング概念について説明します。次の章が含まれます。
本マニュアルについて
表示のプログラミング
Flex 2 開発ガイド > Flex アプリケーションのユーザーインターフェイスの作成 > データプロバイダおよびコレクションの使用
データプロバイダおよびコレクションの使用
Adobe Flex コントロールの中には、配列や XML オブジェクトなどのデータプロバイダから入力を受け取るものがあります。たとえば、Tree コントロールはデータプロバイダからデータを読み取ることによって、ツリー構造と各ツリーノードに割り当てられたデータを定義します。Flex コントロールでは、データプロバイダを表すためにコレクションクラスを使用します。コレクションにはオブジェクトのグループが含まれており、コレクション内のアイテムのアクセス、ソート、フィルタ、および変更を行うための一連のメソッドを提供しています。このトピックでは、データプロバイダとコレクションクラスについて説明します。また、コントロールでのデータプロバイダの使用について概説するとともに、コレクションクラスを使用してデータにアクセスし、操作する方法について説明します。データプロバイダを使用する Flex コントロールについては、データ駆動型コントロールの使用やメニューベースのコントロールの使用などに説明があります。
データプロバイダおよびコレクションについて
IList インターフェイスのメソッドとプロパティの使用
階層データプロバイダの使用
リモートデータプロバイダの使用
Flex 2 開発ガイド > Flex アプリケーションのユーザーインターフェイスの作成 > データプロバイダおよびコレクションの使用 > データプロバイダおよびコレクションについて
データプロバイダおよびコレクションについて
多くのコントロールやコンテナがメニューなどのコントロールの表示、ユーザー操作、または構成のためにデータを必要とします。このデータを提供するには、データプロバイダおよびコレクションの概念と、コレクションのしくみを理解する必要があります。
データプロバイダについて
コレクションについて
MXML アプリケーションでのデータプロバイダの指定
例 : 簡単なデータプロバイダの使用
データプロバイダについて
リストコントロールなどの一部の Flex フレームワーク コンポーネントは、"データプロバイダ" からのデータを表します。データプロバイダとは、コントロールによって必要とされるデータを含むオブジェクトのことです。たとえば、Tree コントロールのデータプロバイダは、ツリー構造と各ツリーノードに割り当てられるデータを決定し、ComboBox コントロールのデータプロバイダは、コントロールのドロップダウンリストの項目を決定します。アプリケーションデータを表示するコントロールのことを、"データプロバイダコントロール" と呼ぶことがあります。データプロバイダを使用するコンポーネントは次のとおりです。最も単純なデータプロバイダとしては、ストリングまたはオブジェクトの配列が考えられます。たとえば、静的な ComboBox コントロールを定義するために次のコードを使用できます。ただし、Array や Object などの生データオブジェクトをデータプロバイダとして使用する場合は、次のような制限があります。変化するデータを使用する場合、生オブジェクトでは十分でないことが少なくありません。その理由は、コントロールが基本オブジェクトの変更通知を受信しないためです。そのため、コントロールはアプリケーションの他の部分の変更によって再描画されるか、またはデータプロバイダが再割り当てされない限り、更新されません。再描画やデータプロバイダの再割り当てが起こると、更新された Array から再びデータが取得されます。生オブジェクトは、データのアクセス、ソート、またはフィルタのための高度なツールを提供していません。Flex は、データの同期を保証するとともに、より簡単で高度なデータアクセスおよび操作ツールを提供するため、"コレクション" メカニズムを備えています。また、コレクションを使用すると、異なるタイプのデータへのアクセスとその管理を一貫したインターフェイスを通じて行うことができます。コレクションの詳細については、コレクションについてを参照してください。個々のコントロールの詳細については、『Adobe Flex 2 リファレンスガイド』のコントロールのページを参照してください。データプロバイダベースのコントロールを使用したプログラミングについては、データ駆動型コントロールの使用を参照してください。
データプロバイダの種類
Flex フレームワークでサポートされている基本的なデータプロバイダの種類は次の 2 つです。リニアまたはリストデータプロバイダは、それぞれが同じ構造を持ついくつかのオブジェクトから構成されるフラットなデータです。リストデータプロバイダはすべてのデータプロバイダコントロールで使用できますが、通常は Tree コントロールと大部分のメニューコントロールのインスタンスを除くデータプロバイダコントロールで使用します。階層データプロバイダは、カスケード構造のデータ (非対称データの場合が多い) から成ります。データのソースには XML オブジェクトがよく使われますが、汎用 Object または具象クラスをソースとすることもできます。階層データプロバイダは通常、階層データを表示するために設計された次のような Flex コントロールで使用します。また、階層データプロバイダからデータを抽出し、リニアデータを受け取る List や DataGrid などのコントロールで使用することもできます。階層データプロバイダを使用すると、ツリーやカスケードメニューのレイアウトに合わせてデータ構造を定義できます。たとえば、ツリーには通常、ルートノードの下にブランチノードまたはリーフ子ノードがあります。ブランチノードの下には他の子ブランチノードまたはリーフノードがありますが、リーフノードはツリーの終点です。Flex 階層データコントロールは、階層データプロバイダにアクセスして操作するために "データ記述子" インターフェイスを使用します。データプロバイダが、デフォルトデータ記述子によって必要とされる構造に適合しない場合は、独自のデータ記述子クラスを作成して必要なインターフェイスを実装できます。階層データプロバイダの使用の詳細については、階層データプロバイダの使用を参照してください。
データプロバイダと uid プロパティ
Flex データ駆動型コントロール (List クラスのサブクラスであるすべてのコントロールなど) は、一意の識別子 (uid) を使用してデータプロバイダのアイテムを追跡します。ただし、IUID インターフェイスを実装して独自の uid プロパティを提供しなければならない場合や、独自の uid プロパティを提供することで処理効率が向上する場合があります。mx_internal_uid プロパティは、バインド可能プロパティを持たない動的なオブジェクトに対して作成されます。複数の異なるオブジェクトを同一と見なす必要がある場合は、IUID インターフェイスを実装して、複数のオブジェクトに同じ uid を割り当てられるようにする必要があります。IUID インターフェイスを実装しなければならない代表的な例は、アプリケーションでウィンドウページングコレクションを使用する場合です。ウィンドウページングコレクション内をカーソルが移動すると、サーバーからの特定のアイテムの取得とメモリからの解放が何度も行われます。アイテムがメモリに取り込まれるたびに、そのアイテムを表す新しいオブジェクトが作成されます。アイテムが等しいかどうかを比較する場合は、同じアイテムを表すすべてのオブジェクトが Flex によって同じものと見なされる必要があります。IUID インターフェイスを実装しなければならないケースより、そうすることで処理効率が向上するケースの方がよくあります。原則として、データプロバイダエレメントが動的クラスのメンバーである場合、IUID インターフェイスは実装しません。これらのクラスについては uid プロパティを自動的に作成できます。しかしそれでも非効率的な面があるため、処理効率が特に重視される場合は、IUID インターフェイスの実装を検討してもかまいません。その他のケースでは、Flex はディクショナリメカニズムを使用して uid を管理しますが、これは独自の UID を提供する場合ほど効率的ではありません。Object クラスと Array クラスは動的なので、データプロバイダのアイテムがこれらのクラスに属する場合、通常はデータプロバイダに対して特別なことを行う必要はありません。ただし、データプロバイダのメンバーが独自に定義したカスタムクラスに属する場合は、IUID インターフェイスの実装を検討してください。IUID インターフェイスには、クラスメンバーの一意の識別子を表す uid プロパティが 1 つ含まれているだけで、メソッドはありません。この識別子は、ユニバーサルに一意であることは保証されていませんが、作成したクラスの全メンバーの中では一意になります。// コンストラクタによって uid が作成されるので、何もしない。オブジェクトに従業員 ID などの一意のフィールドが含まれている場合には、UIDUtil クラスを使用する必要はありません。uid プロパティの値はデータプロバイダの中だけでオブジェクトを一意に識別できればよいので、この場合は従業員 ID を uid プロパティとして使用できます。次の例ではこの方法を採っています。オブジェクトのクローン作成では UID は管理されず、UID と関連付けられることもありません。したがって、内部 UID を持つ対象のクローンを作成する場合、その内部 UID を変更する必要があります。uid プロパティに格納するので、クローンの作成後、このプロパティを変更する必要があります。ただし、データプロバイダでは IUID を実装する必要はありません。データプロバイダが IUID を実装しないデータクラスのインスタンスでも、ダイナミックオブジェクトではない場合、クローン技術は適切に動作しますが、ほとんどのデータプロバイダアイテムは、特にそれらのオブジェクトのクローン作成が必須ではない場合には、IUID を実装する必要があります。
Flex 2 開発ガイド > Flex アプリケーションのユーザーインターフェイスの作成 > データプロバイダおよびコレクションの使用 > 階層データプロバイダの使用
階層データプロバイダの使用
ツリーのブランチとリーフ、Menu サブメニューとアイテムなど、ノードとサブノードから成るネストした階層を表示するコントロールでは、階層データプロバイダを使用します。次のコントロールは、階層データプロバイダを利用します。階層コンポーネントはすべて、データプロバイダの操作に同じメカニズムを使用します。このセクションの例では Tree コントロールを使用していますが、これは他のコンポーネントにも適用できます。
階層データプロバイダについて
データ記述子と階層データプロバイダ構造
XML データプロバイダの使用
階層データプロバイダについて
Flex フレームワークはデフォルトで、次の 2 種類の階層データソースをサポートします。XML は次のいずれかにすることができます。これらのタグはデータバインディングをサポートします。Flex では、整形式 XML のネスト階層を反映する Tree またはメニューコントロールを自動的に構成できます。詳細については、カスタムデータ記述子の作成を参照してください。<mx:Model> コンパイル時タグを使用して、データバインディングをサポートするネストされたオブジェクトを作成できますが、その場合はTree およびメニューコントロールでの <mx:Model> タグの使用で定義された構造に従う必要があります。子を可変名のフィールドに格納できるネストされた Object など、上記以外の階層データプロバイダ構造のサポートも追加できます。
Flex 2 開発ガイド > Flex アプリケーションのユーザーインターフェイスの作成 > データプロバイダおよびコレクションの使用 > リモートデータプロバイダの使用 > ページング対応のリモートデータプロバイダの使用
ページング対応のリモートデータプロバイダの使用
DataService クラスを使用してリモートデータを取得する場合、初期段階ではクライアント側のコレクションにすべてのデータをロードしないようにすることができます。この手法を使用すると、大量のデータがネットワーク上を転送されて、そのデータ処理のためにアプリケーションの速度が低下するような事態を避けることができます。段階的に取得するデータのことを "ページング" データ、まだ受信されていないデータのことを "保留" データと呼びます。すべてのデータが使用可能になってからコントロールを表示する。ページングデータを取得しているとき、プログラムコードが保留データにアクセスしようとすることがあります。この場合、アプリケーションでエラーを管理する必要はありません。このような機能を持つコントロールは次のとおりです。そのため、エラー処理コードを独自に記述する必要があります。コントロールが ItemPendingError エラーを処理しない コントロールのデータプロバイダとしてページングコレクションを使用する場合は、データが完全にロードされてからコントロールにデータを渡すようにするか、またはコントロールで予期せぬ動作が起きていないかどうかをアプリケーションで監視する必要があります。ページングコレクションを直接使用するコードを記述している コードの中で保留データを処理しようとしていないかどうかを調べます。たとえば、コレクション全体を反復処理している場合は、while ループを try/catch ブロックで囲み、反復処理が完了するまで呼び出し続けます。ItemPendingError クラスには、要求されたデータのステータスを確認する手段として、次のような方法が用意されています。前者はデータが正常に取得されたときに呼び出され、後者は取得が失敗したときに呼び出されます。これらの状況を処理する関数を必要に応じて記述します。ItemResponder クラスのコンストラクタはこれら 2 つの関数をパラメータとして受け取り、3 番目にオプションパラメータとして、両関数がその処理で使用できる Object を受け取ります。エラーを生成する可能性のあるコードを try ブロックに配置します。// 新しく受信したデータを処理するコードをここに記述する。
// データの受信に失敗したときのコードをここに
// カーソルを移動するコードを try ブロックに配置する。
// catch ブロックでは、要求されたデータが保留中のときに生成されるエラーを
// データが使用可能になった場合を処理する関数を定義する。// "実際の" エラーが発生した場合を処理する関数を定義する。データは先頭から順にロードされるとは限りません。すべてのデータが使用可能になってからコントロールを表示する。チャートコントロールのように、データプロバイダに完全なデータセットが含まれていることを必要とするコントロールを使用する場合は、コレクションのすべてのデータが使用可能になってからコントロールの dataProvider プロパティを割り当てるようにする必要があります。ただし、Flex アプリケーションで異なる目的のために同じ Data Management Service の宛先を使用する場合など、場合によってはコントロールでページングデータを使用しなければならないことがあります。完全なデータが必要なコントロールでページングデータを使用する方法の 1 つとして、IList インターフェイスの toArray() メソッドを使用する方法があります。このメソッドは、指定されたパラメータオブジェクト内のすべてのデータを Array にロードしようとします。また、それとは別に、コントロールでデータを使用する前にデータの最初から最後までを反復処理する方法も考えられます。次の例ではこの反復処理法を使用して、ページング対応のデータプロバイダ (theDP 変数で指定されている) にデータが完全にロードされてから、チャートコントロールでそのデータが使用されるようにしています。
Flex 2 アプリケーションの構築とデプロイ > 構築とデプロイの概要 > Flex アプリケーション構造 > インストールディレクトリ構造
アプリケーション開発環境の設定を開始する前に、Flex インストールディレクトリを把握しておいてください。このセクションでは次のインストールディレクトリ構造について説明します。Flex 2 SDK をインストールすると、インストーラにより次のディレクトリ構造がインストールディレクトリに作成されます。css" などの設定ファイルが収められます。ライブラリ SWC ファイルが収められます。これらのファイルはアプリケーションのコンパイルに使用します。ローカリゼーションリソースファイルが収められます。Flex フレームワークソースコードが収められます。Flex の全コンポーネントの基本的な外観と操作性を定義するテーマファイルが収められます。JAR ファイルが収められます。テンプレート HTML ラッパーファイルが収められます。サンプルアプリケーションが収められます。インストーラは次のディレクトリ構造を作成します。ディレクトリの説明については、Flex 2 SDK のインストールディレクトリ構造を参照してください。Flex データサービスをインストールすると、インストーラは次のディレクトリ構造を作成します。Flex データサービスの最上位ディレクトリです。このディレクトリには J2EE サーバーに Flex データサービスをデプロイするときに使用する WAR ファイルが収められます。css" などの設定ファイルが収められます。ライブラリ SWC ファイルが収められます。これらのファイルはアプリケーションのコンパイルに使用します。Flex SDK ローカリゼーションリソースファイルが収められます。Flex データサービスローカリゼーションリソースファイルが収められます。Flex フレームワークソースコードが収められます。すべての Flex コンポーネントの基本的な外観と操作性を定義する Flex テーマファイルが収められます。このディレクトリには、Flex データサービスとともに JRun 4 をインストールした場合に、JRun 4 アプリケーションファイルが保存されます。サブディレクトリには、異なるバージョンの Flash Player (スタンダード版とデバッガ版)、ラッパー、構成ファイル、およびセキュリティリソースおよびアセットの作成用のテンプレートが含まれます。swc" などの必要なファイルを Flex のインストールに自動的にコピーします。インストール時に、必要なファイルを Flex のインストールにコピーしないことを選択した場合は、そのコピーを手動で実行する必要があります。詳細については、インストール手順を参照してください。
Flex 2 開発ガイド > ユーザーインターフェイスのカスタマイズ > ビヘイビアの使用 > ビヘイビアについて > ファクトリクラスとインスタンスクラスについて
ファクトリクラスとインスタンスクラスについて
Flex は 1 つのアーキテクチャを使用してエフェクトを実装します。このアーキテクチャでは、各エフェクトは、ファクトリクラスとインスタンスクラスの 2 つのクラスによって表現されます。ファクトリクラス ファクトリクラスは、インスタンスクラスのオブジェクトを作成し、そのターゲットオブジェクト上でエフェクトを実行します。アプリケーション内でファクトリクラスインスタンスを作成し、ズームサイズやエフェクトの継続時間など、エフェクトを制御するために必要なプロパティをそのインスタンスに設定します。その後、次の例に示すように、ファクトリクラスインスタンスを、対象のコンポーネントのエフェクトトリガに割り当てます。-- ファクトリクラスをエフェクトターゲットに割り当てます -->慣例では、ファクトリクラスの名前は Zoom または Fade などのエフェクトの名前になります。インスタンスクラス インスタンスクラスは、エフェクトロジックを実装します。エフェクトトリガが実行されるか、ユーザーが play() メソッドを呼び出してエフェクトを起動すると、ファクトリクラスによりインスタンスクラスのオブジェクトが作成され、そのターゲット上でエフェクトが実行されます。エフェクトが終了すると、Flex によりインスタンスオブジェクトが破棄されます。エフェクトの対象となるコンポーネントが複数ある場合には、ファクトリクラスは対象ごとに 1 つずつ複数のインスタンスオブジェクトを作成します。次の図は、Flex のエフェクトクラスのクラス階層を示しています。この図のとおり、各ファクトリクラスには対応するインスタンスクラスがあります。エフェクトを使用するには、次の手順を実行します。ファクトリクラスオブジェクトを作成します。ファクトリクラスオブジェクトを設定します。Flex では、エフェクトの再生時に、次のアクションが実行されます。エフェクトの各ターゲットコンポーネントにインスタンスクラスのオブジェクトが 1 つ作成されます。ファクトリオブジェクトからインスタンスオブジェクトに構成情報がコピーされます。インスタンスオブジェクトを使用して、ターゲットでエフェクトが再生されます。エフェクトが完了すると、インスタンスオブジェクトが削除されます。ファクトリオブジェクトに加えた変更は、現在再生中のインスタンスオブジェクトには反映されませんが、次にエフェクトが再生される際には、インスタンスオブジェクトでは新しい設定が使用されます。アプリケーションでエフェクトを使用する場合は、ファクトリクラスにのみ注意します。これは、インスタンスクラスが実装の詳細を示しているためです。ただし、カスタムエフェクトクラスを作成する場合は、ファクトリクラスとインスタンスクラスを実装する必要があります。詳細については、『 Flex 2 コンポーネントの作成と拡張』のエフェクトの作成を参照してください。
Flex 2 開発ガイド > ユーザーインターフェイスのカスタマイズ > ビヘイビアの使用 > ビヘイビアについて > 使用可能なエフェクト
使用可能なエフェクト
次の表は、Flex がサポートするエフェクトの一覧です。ユーザーは、アニメーション化するプロパティのプロパティ名、開始値、および終了値を指定します。このエフェクトはまずプロパティを開始値に設定し、エフェクトの継続中はプロパティの値が終了値に達するまで値を更新し続けます。たとえば、Button コントロールの幅を変更するには、アニメーション化するプロパティとして幅を指定し、開始時と終了時の幅の値をエフェクトに指定します。コンポーネントにぼかし効果を適用します。Blur エフェクトは画像の詳細部分の表示をやわらかくします。このとき、ソフトで焦点の定まらないぼかし効果からガウスぼかし効果までを生成することができます。ガウスぼかしは、半透明のガラスを通して見たような、かすんだ効果をイメージに与えます。ターゲットコンポーネントが徐々に表示または非表示になるようにするには、オーバーレイの alpha プロパティを変更します。省略した場合、コンポーネントの現在のアルファレベルが使用されます。color エフェクトによってターゲットオブジェクト上に表示されるオーバーレイ矩形の色を表す値です。ターゲットオブジェクトがコンテナである場合、コンテナの子だけがディゾルブします。コンテナの境界線はディゾルブしません。この問題の原因は、creationComplete イベントが送出されるまでデータプロバイダが設定されないことにあります。このため、エフェクトの再生が開始されるときには、Flex では DataGrid コントロールのサイズ設定が完了していません。メモ : Dissolve エフェクトをテキストに対して使用する場合は、埋め込みフォントを使用する必要があります。デバイスフォントは使用できません。詳細については、スタイルとテーマの使用を参照してください。コンポーネントが透明から不透明に、または不透明から透明に推移するようなアニメーション効果を設定します。Fade エフェクトには、次のプロパティがあります。省略した場合、コンポーネントの現在のアルファレベルが使用されます。0 (hide トリガの場合) に推移するトランジションが適用されます。メモ : Fade エフェクトをテキストに対して使用する場合は、埋め込みフォントを使用する必要があります。デバイスフォントは使用できません。詳細については、スタイルとテーマの使用を参照してください。コンポーネントに発光効果を適用します。ターゲットの中央に配置された矩形マスクを拡張または縮小して、エフェクトターゲットをアニメーション化します。このエフェクトでは、ターゲットの中央からマスクが拡張してターゲットが公開されるか、ターゲットの中央に向かってマスクが縮小し、ターゲットが覆い隠されます。詳細については、マスクエフェクトの使用を参照してください。指定された時間をかけてコンポーネントの位置を変更します。VBox コンテナや Grid コンテナなど、自動レイアウトを実行するコンテナのターゲットに適用した場合、移動は実行されますが、コンテナのレイアウトが次回更新されるとターゲットが元の位置に戻ってしまいます。コンテナの autoLayout プロパティを false に設定すると元の位置への移動を無効にできますが、コンテナのすべてのコントロールのレイアウトが無効になります。Move エフェクトには、次のプロパティがあります。省略した場合、現在の位置が使用されます。正数または負数を指定できます。3 つすべてを指定した場合、xBy プロパティは無視されます。トリガに Move エフェクトを指定し、From、To、By の 6 つのプロパティ値をどれも設定しない場合、オブジェクトが現在の位置から新しい位置にスムーズに移動するように、これらのプロパティの値が設定されます。Move エフェクトの実行時、移動しているコンポーネントの周囲のレイアウトは再調整されません。指定された時間が経過するまで、すべての処理を中断します。エフェクトを合成する場合などに使用します。詳細については、組み合わせたエフェクトの作成を参照してください。指定された時間をかけてコンポーネントの幅と高さを変更します。Resize エフェクトには、次のプロパティがあります。省略した場合、現在のサイズが使用されます。3 つのプロパティをすべて指定した場合、widthBy プロパティは無視されます。Resize トリガに対して Resize エフェクトを指定した場合で、From、To、By のプロパティ (合計 6 つ) をまったく設定しなかった場合、オブジェクトが変更前のサイズから変更後のサイズへとスムーズにトランジションするような値が Flex によって自動的に設定されます。Resize エフェクトを適用すると、レイアウトマネージャは、対象コンポーネントのサイズの変化に基づいて、隣接するコンポーネントのサイズを変更します。他のコンポーネントのサイズを変えずにエフェクトを実行するには、対象のコンポーネントを Canvas コンテナに配置してください。詳細については、Panel コンテナのサイズ変更におけるパフォーマンスの向上を参照してください。指定された点を中心にコンポーネントを回転させます。回転の中心点を座標で指定したり、回転の開始時と終了時の角度を指定することができます。角度には正の値または負の値を指定できます。Resize エフェクトには、次のプロパティがあります。メモ : Rotate エフェクトをテキストに対して使用する場合は、埋め込みフォントを使用する必要があります。デバイスフォントは使用できません。詳細については、スタイルとテーマの使用を参照してください。MP3 オーディオファイルを再生します。たとえば、ユーザーが Button コントロールをクリックしたときに、サウンドを再生することができます。このエフェクトでは、サウンドの繰り返し再生、ソースファイルの選択、およびボリュームとパンの制御が可能です。それ以外の場合は、MP3 ファイルへの完全な URL を指定してください。詳細については、サウンドエフェクトの使用を参照してください。エフェクト適用前または適用後のコンポーネントの状態は不可視にする必要があります。これらのエフェクトには、次のプロパティがあります。false にすると、コンポーネントが非表示になります。詳細については、マスクエフェクトの使用を参照してください。コンポーネントをその中心点からズームインまたはズームアウトします。Zoom エフェクトには、次のプロパティがあります。
デフォルト値は 0
デフォルト値は 1
ターゲットのサイズを 2 倍にするには、値を 2
0 に指定します。デフォルト値は、エフェクトターゲットの中心の座標です。メモ : システムフォントを使用してレンダリングしたテキストに Zoom エフェクトを適用すると、そのテキストはすべてのポイントサイズの範囲で拡大および縮小されます。テキストに Zoom エフェクトを適用する際に埋め込みフォントを使用する必要はありません。しかし、埋め込みフォントを使用すれば、滑らかな Zoom エフェクトが得られます。詳細については、スタイルとテーマの使用を参照してください。
プロジェクトの手動による構築
プロジェクトを手動で構築する場合、構築のタイミングとスコープを制御できます。たとえば、単一プロジェクトの構築、ワークスペース内のすべてのプロジェクトの構築、またはプロジェクトや選択したプロジェクトリソースのワーキングセット (コレクション) の作成、これらのプロジェクトやリソースのみの構築が可能になります。ワーキングセットとは、必要に応じて選択、グループ化、操作ができるワークスペースリソース (プロジェクト、ファイル、およびフォルダ) のコレクションです。ワーキングセットの詳細については、ワーキングセットの作成を参照してください。構築オプションには、次の図に示すように、[プロジェクト] メニューからアクセスできます。
単一プロジェクトを構築するには :
ナビゲータビューで構築するプロジェクトを選択します。メインメニューから [プロジェクト]- [プロジェクトのビルド] を選択します。選択したプロジェクトが構築され、リリース版とデバッグ版の新規または更新済みアプリケーションファイルがプロジェクトの出力フォルダに追加されます。保存する必要があるプロジェクトファイルがある場合、構築の開始前に保存するよう要求されます。この保存プロンプトを迂回するには、構築の開始前にファイルを自動的に保存するように、ワークスペースの環境設定を行うことができます。
ワークスペース内のすべてのプロジェクトを構築するには :
メインメニューから [プロジェクト]-[すべてビルド] を選択します。ワークスペース内のすべてのプロジェクトが構築され、アプリケーションファイルが各プロジェクトの出力フォルダに追加されます。構築の開始前にファイルを自動的に保存することを選択していない場合、ファイルを保存するように要求されます。前のメモを参照してください。ワーキングセットを構築するには、次のいずれかの手順を実行します。メインメニューから [プロジェクト]-[ワーキングセットのビルド]-[ワーキングセットの選択] を選択して、ワーキングセットを定義します。[ワーキングセットの選択] ダイアログボックスが表示されます。[新規] ボタンを選択して、新しいワーキングセットを作成します。ワーキングセットの作成方法の詳細については、ワーキングセットの作成を参照してください。メインメニューから [プロジェクト]-[ワーキングセットのビルド]-[ワーキングセットの選択] を選択して、既存のワーキングセットを選択します。ワーキングセット内のすべてのプロジェクトが構築され、アプリケーションファイルがプロジェクトの出力フォルダに追加されます。
プロジェクトリソースの自動的な保存
クリーンビルドの実行
プロジェクトの構築順序の変更
ワークスペース内の複数のプロジェクトを操作する場合、プロジェクト間の関係を作成できます。たとえば、ActionScript クラスをあるプロジェクトから別のプロジェクトに読み込むことができます。プロジェクト間の関係を作成すると、プロジェクトの構築順序に影響を与えます。デフォルトでは、コンパイラは、関連するプロジェクトをすべて適切に構築できるような順序で構築します。たとえば、あるプロジェクトが別のプロジェクトに格納されているクラスを参照している場合、該当するクラスを格納しているプロジェクトが最初に構築されます。ほとんどの場合、プロジェクトの適切な順序での構築はコンパイラに任せるだけで十分で、アプリケーションが正常に生成されます。ただし、構築順序は変更可能です。カスタム Ant ビルダーを作成しワークスペース内のプロジェクトに関連付けていて、他のプロジェクトの構築前にそのプロジェクトを構築する必要がある場合などに、構築順序を変更します。カスタムビルダーの作成方法の詳細については、Apache Ant を使用した構築のカスタマイズを参照してください。
プロジェクトの構築順序を変更するには :
メインメニューから [ウィンドウ]-[設定] を選択します。[ビルド順序] ダイアログボックスに、次のオプションが表示されます。[デフォルトのビルド順序の使用] デフォルトの構築順序は、プロジェクト間の依存関係によって決まり、コンパイラによって処理されます。[プロジェクトのビルド順序] ワークスペース内のすべてのプロジェクトの構築順序を手動で設定できます。構築順序一覧からプロジェクトを削除することもできます。ただし、その場合でも、そのプロジェクトは、構築順序一覧内のすべてのプロジェクトの後に構築されます。[サイクルでビルドするときの最大反復] プロジェクトに循環参照 (できれば使用しない) が含まれている場合、構築試行回数を設定して、コンパイラがすべてのプロジェクトを適切に構築できるようにします。デフォルトの最大反復回数は 10 です。必要に応じて構築順序を変更し、[OK] をクリックします。
プロジェクトの手動による構築
プロジェクトリソースの自動的な保存
クリーンビルドの実行
Flex 2 開発ガイド > ユーザーインターフェイスのカスタマイズ > アイテムレンダラーとアイテムエディタの使用 > アイテムレンダラーとアイテムエディタの作成
アイテムレンダラーとアイテムエディタの作成
カスタムアイテムレンダラーやカスタムアイテムエディタを使用する場合、最初に決定しなればならないことはこれらの実装方法です。アイテムレンダラーとアイテムエディタの定義方法には、次の 3 とおりあります。ドロップインアイテムレンダラーとドロップインアイテムエディタ コンポーネントを 1 つ挿入して、アイテムレンダラーまたはアイテムエディタを定義します。詳細については、ドロップインアイテムレンダラーまたはドロップインアイテムエディタの使用を参照してください。インラインアイテムレンダラーとインラインアイテムエディタ リストコントロールの子タグを使用してコンポーネントを定義し、アイテムレンダラーまたはアイテムエディタを定義します。詳細については、インラインアイテムレンダラーまたはインラインアイテムエディタの使用を参照してください。アイテムレンダラーとアイテムエディタのコンポーネント アイテムレンダラーまたはアイテムエディタを再利用可能なコンポーネントとして定義します。詳細については、アイテムレンダラーまたはアイテムエディタとしてのコンポーネントの使用を参照してください。次のセクションで、それぞれの方法について説明します。
ドロップインアイテムレンダラーまたはドロップインアイテムエディタの使用
インラインアイテムレンダラーまたはインラインアイテムエディタの使用
アイテムレンダラーまたはアイテムエディタとしてのコンポーネントの使用
アイテムレンダラーでの編集可能なコントロールの使用
アイテムレンダラーとアイテムエディタのライフサイクルについて
軸ラベルの定義
水平軸または垂直軸に軸ラベルの値を定義します。コールバック関数に必要な形式を以下に示します。次の表で、コールバック関数のパラメータについて説明します。
現在のラベルの値
このラベルの前のラベルの値
ラベルオブジェクトへの参照
コールバック関数が返すオブジェクトの型
labelFunction を使用する場合は、軸のクラスまたはチャートのパッケージ全体を次の例のように読み込む必要があります。ここでは月名を使用し、そのストリングに年を追加しているため、ラベルの書式設定関数の戻り値の型は String です。軸ラベルのカスタマイズには、ラベルにカスタムデータプロバイダを設定するという方法もあります。詳細については、PieChart コントロールでのラベルの使用を参照してください。
凡例マーカーの書式設定
凡例マーカーの外観は、プログラムレンダラークラスで定義できます。Flex では、凡例マーカーに使用できるデフォルトのレンダラークラスが複数用意されています。このプロパティでは、関連するすべての凡例にマーカーをレンダリングする場合に使用するクラスを指定します。それぞれの系列にはデフォルトレンダラーがあり、これらのスタイルプロパティのいずれも指定されていない場合に使用されます。独自のカスタム汎用マーカークラスを作成できます。使用可能なレンダラークラスの詳細については、ChartItem オブジェクトへのスキンの適用を参照してください。
横棒グラフの使用
BarChart コントロールを使用すると、データ内の値によって長さが決まる一連の横棒でデータを表すことができます。BarChart コントロールを使用すると、集合横棒、積み上げ、積み重ね、構成比、高低など、チャートをさまざまな方法で表すことができます。詳細については、チャートの積み重ねを参照してください。次の表で、横棒グラフの定義に使用する BarSeries チャート系列のプロパティについて説明します。チャート内の各横棒の下端の y 軸の位置を決定するデータプロバイダのフィールドを指定します。このプロパティを省略すると、データプロバイダ内でのデータの順序に従って横棒が並べられます。各横棒の終端の x 軸の位置を決定するデータプロバイダのフィールドを指定します。横棒の下端の x 軸の位置を決定するデータプロバイダのフィールドを指定します。このプロパティは、積み上げグラフ、積み重ねグラフ、または構成比グラフには影響しません。横棒グラフは本質的には、時計回りに 90 度回転させた縦棒グラフであるため、横棒グラフと縦棒グラフには共通する特性が多数あります。詳細については、縦棒グラフの使用を参照してください。
円グラフの使用
標準的な円グラフを定義するには、PieChart コントロールを使用します。円グラフ内の各区分の大きさは、データプロバイダのデータにより、他の区分との関連で決定されます。円グラフの例を次に示します。PieSeries では、標準的な円グラフまたはドーナツグラフを作成できます。また PieChart コントロールでは、データポイントを示すラベルを使用できます。円グラフの各区分のデータを決定するデータプロバイダのフィールドを指定します。区分に使用するラベルのレンダリング方法を指定します。データヒントと凡例で、各区分の名前として使用するデータプロバイダのフィールドを指定します。
ドーナツグラフの作成
分離円グラフの作成
PieSeries チャート系列では、区分を一様に分離することも、区分ごとに分離することもできるので、次のようなチャートを作成することができます。次の表で、分離円グラフをサポートするプロパティについて説明します。円グラフの区分を分離する際に指定可能な半径を示すパーセント値です。それぞれの値を定義しないことも可能です。分離区分をアニメーション化する際に予約可能な半径を示しています。次に例を示します。配列の各値が、対応するデータポイントに適用されます。次の例では、4 番目のデータポイントである自動車 (Car) 費用の区分が分離されます。
プロットチャートの使用
各データポイントには、x 軸上の位置を示す値と y 軸上の位置を示す値が 1 つずつあります。各データポイントに表示されるシェイプは、データ系列のレンダラーを使用して定義できます。次の図は、プロットチャートの例を示しています。次の表で、プロットチャートの定義によく使用する PlotSeries チャート系列のプロパティについて説明します。各データポイントの y 軸の位置を決定するデータプロバイダのフィールドを指定します。各データポイントの x 軸の位置を決定するデータプロバイダのフィールドを指定します。各データポイントに表示するシンボルの半径をピクセル単位で指定します。デフォルト値は 5 ピクセルです。デフォルトでは、チャートにおける最初のデータ系列の各ポイントがダイアモンドで表示されます。チャートにデータ系列を複数定義した場合、データ系列のシェイプが、ダイアモンド、円、四角形の順で循環して使用されます。データ系列がデフォルトのレンダラーより多い場合は、再度ダイアモンドから使用されます。ダイアモンドのシェイプは、他のシェイプと同様にレンダラークラスで定義されています。
これらのシェイプを定義しているレンダラークラスは、mx
次のデフォルトのレンダラークラスは、データポイントの外観を定義します。チャートに表示される各データポイントのイメージは、系列の itemRenderer スタイルプロパティを設定することによって制御できます。次の例では、系列のデフォルトのレンダラーをオーバーライドします。グラフィックやカスタムクラスを使用して、プロットの各ポイントを定義することもできます。詳細については、カスタムレンダラーの作成を参照してください。
コードブロックの折り畳みと展開
複雑なコードドキュメント内の移動、表示、管理を容易にするために、複数行のコードブロックを折り畳みまたは展開できます。
コードブロックを折り畳むには :
エディタの左余白の折り畳みシンボル (-) をクリックします。コードブロックを折り畳むと、最初のコード行以外のすべてが非表示になります。次に、コードブロックを展開して再度表示したり、展開シンボル (+) 上にマウスポインタを移動して、ツールヒントにコードブロック全体を表示したりできます。
コードブロックを展開するには :
エディタの左余白の展開シンボル (-) をクリックします。
コード折り畳みの環境設定を行うには :
コードの折り畳みをオフにするには、[ウィンドウ]-[設定]-[Flex]-[エディター] を選択し、[コードの折りたたみを有効にする] オプションの選択を解除します。
アウトラインビューによるコードのナビゲートと確認
エディタでの概要ビューの使用
コード定義のオープン
タイプの参照とオープン
行番号の表示
プロジェクトをアプリケーションに組み込んだら (プロジェクトの構築を参照)、Flex Builder でそれらのプロジェクトを実行しデバッグできます。
起動設定を使用したアプリケーションの実行とデバッグ
起動設定は、プロジェクト名、メインアプリケーションファイル、アプリケーションの実行版とデバッグ版へのパスなどの項目を定義します。Flex Builder には、各プロジェクトに自動的に起動設定を作成する、Flex アプリケーションのデフォルトの起動設定が用意されています。詳細については、起動設定の管理を参照してください。アプリケーションの初回実行時に作成する必要があります。詳細については、アプリケーションの実行を参照してください。
起動設定のカスタマイズ
自動的に作成される起動設定はカスタマイズできます。プロジェクト内の各アプリケーションファイルに別個の起動設定を作成することもできます。詳細については、起動設定の作成または編集を参照してください。デフォルトでは、起動設定によって、実行パスとデバッグパスがプロジェクトの出力フォルダの HTML ラッパーファイルを指し示すことが指定されます。また、システムデフォルトの Web ブラウザの設定をオーバーライドして、インストールしている任意のブラウザでアプリケーションを実行できます。詳細については、デフォルトの Web ブラウザの変更を参照してください。
コードエディタからのデバッグツールの実行
Flex Builder デバッグパースペクティブには、堅牢なフル機能の開発ツールに期待できるすべてのデバッグツールが備わっています。ブレークポイントの設定と管理、アプリケーションの中断、再開、および終了によるアプリケーションの実行制御、コードのステップインとステップオーバー、変数の監視、式の評価などを行うことができます。Flex Builder デバッグツールの詳細については、アプリケーションのデバッグを参照してください。
ブレークポイントでのデバッグパースペクティブのアクティブ化
ブレークポイントは、コードエディタで実行可能なコード行に追加します。デバッグセッションを開始すると、最初のブレークポイントが見つかるまで、アプリケーションが実行されます。その後、デバッグパースペクティブがアクティブになるため、デバッグツールを使用して、アプリケーションの状態を調べ、管理できます。詳細については、デバッグセッションの開始を参照してください。
アプリケーションの実行とデバッグの詳細
『Flex 2 ファーストステップガイド』のファーストステップレッスンアプリケーションのデバッグを読み直していない場合は、読み直してください。詳細については、このトピックの次のセクションを参照してください。
アプリケーションの実行
起動設定の管理
アプリケーションのデバッグ
アプリケーションの実行
アプリケーションは、起動設定に基づいて実行 (およびデバッグ) されます。0 アプリケーションを作成すると、作成されたアプリケーションファイルやメインアプリケーションファイルなどの場所が起動設定で指定されます。起動設定の変更やカスタム起動設定の作成もできます。詳細については、起動設定の管理を参照してください。たとえば、[実行] コマンドは、ワークベンチのメインメニューとツールバーから、およびナビゲータビューとコードエディタのポップアップメニューから使用できます。
Flex アプリケーションのデフォルトの起動設定を使用して現在選択されているプロジェクトを実行するには :
ナビゲータビューで、実行するプロジェクトを選択します。メインワークベンチツールバーで、[実行] ボタン ( ) をクリックします。プロジェクトがまだ構築されていない場合は、Flex Builder によって構築されて実行されます。アプリケーションファイルとして設定されているプロジェクトファイルは、実行とデバッグが可能です。詳細については、プロジェクトアプリケーションファイルの管理を参照してください。
カスタム起動設定を作成するには :
ナビゲータビューで、実行するプロジェクトを選択し、エディタでメインアプリケーションファイルを開きます。メインワークベンチツールバーで、[実行] ドロップダウンリストをクリックして、[実行] を選択します。[構成の作成、管理、および実行] ダイアログボックスが表示されます。起動設定の一覧で、[Flex アプリケーション] を選択します。[新規] をクリックします。起動設定名を入力します。必要に応じて設定プロパティを変更します。アプリケーションを即座に実行するには、[実行] をクリックします。
プロジェクト内のアプリケーションファイルを実行するには :
ナビゲータビューで、実行するプロジェクトを選択します。メインワークベンチツールバーで、[実行] ドロップダウンリストをクリックします。[実行] ボタンには、メインアクションボタンと、実行とデバッグが可能なプロジェクト内のすべてのアプリケーションファイルを表示するドロップダウンリストの 2 つのエレメントがあります。メインアクションボタンをクリックすると、プロジェクトのデフォルトのアプリケーションファイルが実行されます。代わりに、ドロップダウンリストをクリックして、プロジェクト内の任意のアプリケーションファイルを選択することもできます。起動設定ダイアログボックスにアクセスし、[実行] コマンドを選択して、起動設定を作成または編集することもできます。実行するアプリケーションを選択します。
カスタム起動設定を実行するには :
メインメニューから [実行]-[実行] を選択します。起動設定ダイアログボックスが表示されます。既存のカスタム起動設定を選択するか、新しい起動設定を作成できます。詳細については、起動設定の管理を参照してください。メインワークベンチツールバーで、[実行] ボタンのドロップダウンリスト (前のメモを参照) をクリックして、[実行] を選択します。起動設定ダイアログボックスが表示されます。既存のカスタム起動設定を選択するか、新しい起動設定を作成できます。現在選択されているプロジェクトを実行する代わりに、最後に起動された設定が実行されます。最近起動された設定の一覧から選択することもできます。
最後に起動された設定を実行するには :
起動設定の管理
アプリケーションのデバッグ
デフォルトの Web ブラウザの変更
アプリケーションの実行とデバッグ時には、システムデフォルトの Web ブラウザが使用されます。各起動設定で固有の Web ブラウザを使用するように設定することはできません。ただし、アプリケーションすべての実行方法とデバッグ方法に影響を与える、ワークベンチの Web ブラウザの設定を変更できます。
デフォルトの Web ブラウザを変更するには :
メインメニューから [ウィンドウ]-[設定] を選択します。[設定] ダイアログボックスが表示されます。システムにインストールされている Web ブラウザの一覧から Web ブラウザを選択します。[内部 Web ブラウザーを使用] オプションは、アプリケーションの実行とデバッグには適用されません。アプリケーションは常に、外部 Web ブラウザで実行されデバッグされます。一覧へのブラウザの追加、編集、および削除を行うこともできます。[OK] をクリックして変更内容を適用します。
起動設定の作成または編集
アプリケーションのデバッグ
ブレークポイントの追加と削除
ブレークポイントを使用すると、アプリケーションの実行を中断して、コードを調べ、Flex Builder のデバッグツールを使用して、エラーを修正するオプションを試すことができます。ブレークポイントは、コードエディタで追加し、アプリケーションのデバッグ時にブレークポイントビューで管理します。ブレークポイントは、実行可能なコード行に追加します。デバッガは、次のアイテムを含む行に設定されているブレークポイントでのみ停止します。ブレークポイントは、コーティング時またはデバッグ中に設定できます。
コードエディタでブレークポイントを設定するには :
0 コードを含むプロジェクトファイルを開きます。ブレークポイントを設定するコード行を見つけ、マーカーバーでダブルクリックしてブレークポイントを追加します。マーカーバーは、コードエディタの左端に沿ってあります。ブレークポイントマーカーは、マーカーバーと、Flex デバッグパースペクティブのブレークポイントビューのブレークポイントの一覧に追加されます。デバッガがブレークポイントに到達すると、アプリケーションが中断され、デバッグパースペクティブが表示されます。また、コードエディタで、ブレークポイントのマークが付いたコード行がハイライト表示されます。次に、デバッグコマンドを使用してコードを操作します。詳細については、デバッグビューでのデバッグセッションの管理を参照してください。
コードエディタでブレークポイントを削除するには :
マーカーバーで、既存のブレークポイントをダブルクリックします。ブレークポイントが、マーカーバーと Flex デバッグパースペクティブのブレークポイントビューから削除されます。ブレークポイントは、ブレークポイントビューで管理します。一覧内の 1 つまたはすべてのブレークポイントを削除するか、一度無効にしてから後で再度有効にすることもできます。詳細については、ブレークポイントビューでのブレークポイントの管理を参照してください。
デバッグセッションの開始
実行/デバッグの環境設定
ブレークポイントビューでのブレークポイントの管理
デバッグビューでのデバッグセッションの管理
変数ビューでの変数の管理
式ビューの使用
変数ビューでの変数の管理
変数ビューには、現在選択されているスタックフレームに定義されている変数 (デバッグビュー) が表示されます。単純な変数 (名前や値) は、1 つの行に表示されます。複雑な変数は複数行に展開して、メンバーを表示できるようにできます。変数ビューを使用すると、変数を式ビューに追加して監視するか、デバッグセッション中に変数の値を変更できます。変数ビューには、変数ビューのツールバーとポップアップメニューからアクセスできる、次のアクションが用意されています。変数のタイプ名を表示します。
論理構造の表示
選択された変数の値を変更します。選択された変数を式ビューに追加して、監視できるようにします。
変数を監視するには :
監視する変数または変数メンバーを選択します。変数が式ビューに追加されます。
変数の値を変更するには :
変更する変数を選択します。[オブジェクト値の変更] ダイアログボックスが表示されます。新しい値を入力して、[OK] をクリックします。変数に新しい値が格納されます。変更された変数は赤色で表示されます。
変数を検索するには :
変数ビューで変数または変数メンバーを検索するには、変数ビューを選択したまま、検索する変数名の入力を開始します。ワイルドカード文字 (*) を使用して、変数名内の任意の場所にある語句 (たとえば、"*color") を検索することもできます。変数の一覧がスクロールして、入力した該当する変数名がハイライト表示されます。
デバッグセッションの開始
実行/デバッグの環境設定
ブレークポイントの追加と削除
ブレークポイントビューでのブレークポイントの管理
デバッグビューでのデバッグセッションの管理
式ビューの使用
コマンドラインコンパイラについて
これらのユーティリティは、他のサーバーにデプロイする Flex アプリケーションをプリコンパイルしたり、テスト環境でのコンパイルを自動化したりするために使用します。コマンドラインコンパイラを使用するには、システムパスに Java ランタイム環境を含める必要があります。コマンドラインで mxmlc および compc を使用する場合は、オプションをコマンドラインに含める代わりに、設定ファイルを使用してオプションを保存することもできます。コマンドラインオプションは、設定ファイルに XML ブロックとして保存できます。詳細については、設定ファイルについてを参照してください。
コマンドラインのシンタックス
オプションの簡略名の使用
Java を使用してコマンドラインコンパイラを呼び出す。Flex に用意されているコマンドラインコンパイラに対するインターフェイスはシンプルです。UNIX ではシェルスクリプトを使用します。これらのファイルは、"bin" ディレクトリにあります。また、このコンパイラは Java で呼び出すこともできます。これにより、コンパイラを Java ベースのプロジェクト (Ant など) またはその他のユーティリティに統合できます。
コマンドラインコンパイラ用のシェルスクリプトと実行可能なファイルは、"mxmlc
Java でコンパイラを呼び出す場合は、JAR ファイルを直接呼び出します。JAR ファイルでコマンドを呼び出すには、コマンドラインから java コマンドを使用して、jar オプションで実行する JAR ファイルを指定します。xml" ファイルを検出するために使用するルートディレクトリを設定できます。このディレクトリから、コンパイラは他の設定ファイルの場所を検出できます。次に、コマンドラインコンパイラを開く場合と同様に、他のすべてのオプションを渡します。次の例では、MyApp のコンパイル時にロケールとソースパスを設定します。
Flex 2 アプリケーションの構築とデプロイ > Flex アプリケーションの構築 > Flex コンパイラの使用 > アプリケーションコンパイラの使用 > アプリケーションコンパイラのオプションについて
アプリケーションコンパイラのオプションについて
次の表に、アプリケーションコンパイラのオプションを示します。Flex アプリケーションまたは SWC ファイルのコンパイル時にアクセシビリティ機能を有効にします。Flex アクセシビリティ機能の使用の詳細については、『Flex 2 開発ガイド』のアクセシビリティアプリケーションの作成を参照してください。詳細については、ファイルエンコーディングの設定を参照してください。ヘルプオプションとともに使用すると、高度なヘルプオプションがリストされます。次に例を示します。これは高度なオプションです。これにより、MXML コンポーネントのパッケージ名が明白になります。これは高度なオプションです。0 クラスに基づくオブジェクトモデルを使用してください。クラスに基づくオブジェクトモデルでは、ほとんどの組み込み関数はクラスの固定メソッドとして実装されます。これは高度なオプションです。標準出力に、詳細なコンパイル時間が出力されます。root} トークンの使用の詳細については、コンテキストルートの変更を参照してください。生成される SWF ファイルのメタデータを設定します。詳細については、SWF ファイルへのメタデータの追加を参照してください。生成される SWF ファイルのメタデータを設定します。詳細については、SWF ファイルへのメタデータの追加を参照してください。生成される SWF ファイルのメタデータを設定します。詳細については、SWF ファイルへのメタデータの追加を参照してください。デバッグ SWF ファイルを生成します。このファイルにはすべてのソースファイルの行番号とファイル名が含まれます。ランタイムエラーが発生すると、スタックトレースにこれらの行番号とファイル名が表示されます。debug オプションを有効にすると、生成される SWF ファイルのサイズが大きくなります。コマンドラインデバッガの詳細については、コマンドラインデバッガの使用を参照してください。Flash IDE でリモートデバッグセッションを実行するためのパスワードを指定します。これは高度なオプションです。アプリケーションの背景色を設定します。次の例に示すように、0x 表記を使用して色を設定します。Flex アプリケーションのデフォルトの背景は、灰色のグラデーションのイメージです。詳細については、アプリケーション設定の編集を参照してください。これは高度なオプションです。アプリケーションのフレームレートを設定します。これは高度なオプションです。アプリケーションのスクリプト実行制限を定義します。実質的なスタックオーバーフローの制限になります。この時間を経過すると、このイベントハンドラはハングしたとみなされ、実行が中止されます。デフォルト値は 60 秒です。この値を 61 秒以上に設定することはできません。これらの設定はアプリケーションでオーバーライドできます。これは高度なオプションです。デフォルトのアプリケーションサイズをピクセル単位で定義します。これは高度なオプションです。デフォルトのスタイルシートの場所を定義します。css" スタイルシートの暗黙的な使用がオーバーライドされます。css" ファイルの詳細については、『Flex 2 開発ガイド』のスタイルとテーマの使用を参照してください。これは高度なオプションです。生成される SWF ファイルのメタデータを設定します。詳細については、SWF ファイルへのメタデータの追加を参照してください。xml" ファイルのコンパイラオプションをターゲットパスに出力します。これは高度なオプションです。プロトタイププロパティを動的にオーバーライドできるようにするには、ECMAScript Edition 3 のプロトタイプに基づくオブジェクトモデルを使用するようにコンパイラに指示してください。プロトタイプに基づくオブジェクトモデルでは、組み込み関数はプロトタイプオブジェクトの動的プロパティとして実装されます。ECMAScript Edition 3 のプロトタイプに基づくオブジェクトモデルを使用すると、型指定のないプロパティと関数をアプリケーションコードで使用できます。そのようにしないと、コンパイラはエラーをスローします。これは高度なオプションです。SWF ファイルのコンパイル時に、リンク付けから除外するシンボルの一覧を設定します。このオプションを使用すると、動的にリンクされた外部参照について、コンパイル時にリンクチェックが実施されます。動的なリンク付けの詳細については、リンク付けについてを参照してください。これは高度なオプションです。SWF ファイルのコンパイル時に、リンク付けから除外する SWC ファイルまたはディレクトリのリストを指定します。このオプションを使用すると、動的にリンクされた外部コンポーネントについて、コンパイル時にリンクチェックが実施されます。動的なリンク付けの詳細については、リンク付けについてを参照してください。+= 演算子を使用すると、新しい SWC ファイルを外部ライブラリのリストに追加できます。埋め込みフォントで FlashType レンダリングエンジンを使用するかどうかを決定するデフォルト値を設定します。スタイルシートで flashType プロパティの値を設定すると、この値がオーバーライドされます。詳細については、『Flex 2 開発ガイド』のスタイルとテーマの使用を参照してください。これは高度なオプションです。ローカルフォントのスナップショットファイルの場所を設定します。このファイルにはシステムフォントデータが含まれます。これは高度なオプションです。フォントマネージャを定義します。詳細については、『Flex 2 開発ガイド』のスタイルとテーマの使用を参照してください。これは高度なオプションです。サーバーのキャッシュに保存するフォントの最大数を設定します。詳細については、フォントとグリフのキャッシュを参照してください。これは高度なオプションです。各フォントについてサーバーにキャッシュできる文字のグリフアウトラインの最大数を設定します。詳細については、フォントとグリフのキャッシュを参照してください。これは高度なオプションです。SWF ファイルのフレームラベルを、フレームにリンクされる一連のクラス名で指定します。このオプションを使用すると、アプリケーションの後に読み込まれ、ModuleManager クラスとのインターフェイスをパブリッシュするアセットファクトリを追加できます。この利点は、アセットがコードに含まれる場合よりもアプリケーションが速く起動されるにもかかわらず、アセットを外部 SWF ファイルに移動する必要がない点です。これは高度なオプションです。Flex コンパイラのヘッドレス実装を有効にします。これにより、次のように設定されます。これは高度なオプションです。使用方法に関する情報を標準出力に出力します。詳細については、コマンドラインのシンタックスを参照してください。使用状況にかかわらず、生成される SWF ファイルに SWC ファイル内のすべてのクラスをリンクします。このオプションを、コンパイル時に参照されるクラスだけが含まれた library-path オプションと比較します。使用状況にかかわらず 1 つまたは複数のクラスを SWC ファイル全体にリンクするには、includes オプションを使用します。通常、このオプションは、リソースバンドルを指定する際に使用されます。1 つまたは複数のクラスを、それらのクラスがコンパイル時に必要であるかどうかに関係なく、生成されるアプリケーション SWF ファイルにリンクします。インクリメンタルコンパイルを有効にします。詳細については、インクリメンタルコンパイルについてを参照してください。コマンドラインコンパイラのデフォルトは false です。Web 層コンパイラはインクリメンタルコンパイルをサポートしていません。保持するメタデータを指定します。デフォルトでは、コンパイラは次のメタデータを保持します。デフォルトのメタデータを保持する場合は、デフォルトのメタデータを置換する = 演算子ではなく、+= 演算子を使用して新しいメタデータを追加する必要があります。これは高度なオプションです。アプリケーションでそのタイプ (クラス) が使用されていない場合でも、スタイルシートのタイプセレクタを SWF ファイルに保持するようにコンパイラに指示します。これは、他のアプリケーションをロードするモジュール化アプリケーションがある場合に有効です。たとえば、SWF ファイルのロードによって、ロードされた (またはターゲット) SWF ファイルで使用されるタイプのタイプセレクタが定義されることがあります。ロードした SWF ファイルをコンパイルするときにこのオプションを true に設定すると、ターゲット SWF ファイルは、ロードの際にそのタイプセレクタにアクセスできます。このオプションを false に設定すると、コンパイラは、コンパイル時にロードした SWF ファイルにそのタイプセレクタを含めません。その結果、スタイルはターゲット SWF ファイルでは使用できなくなります。これは高度なオプションです。生成されるクラスファイルには、コンパイラが生成し、SWF ファイルの構築に使用するスタブとクラスが含まれます。アプリケーションコンパイラを使用する場合、ファイルのデフォルトの場所は "/generated" サブディレクトリで、これはターゲット MXML ファイルのすぐ下にあります。これは高度なオプションです。生成される SWF ファイルのメタデータを設定します。詳細については、SWF ファイルへのメタデータの追加を参照してください。生成されるアプリケーション SWF ファイルに SWC ファイルをリンクします。コンパイラでは、SWC ファイル用の必須のクラスにしかリンクしません。これらは必須です。SWC ファイル全体ではなく個々のクラスまたはパッケージを指定する場合は、source-path オプションを使用します。swc " ファイルとロケール SWC ファイルを明示的に追加する必要があります。コマンドラインで += 演算子を使用すると、既存の SWC ファイルのリストに新しいパラメータを追加することができます。コンパイル時に使用するライセンスキーを定義します。指定した出力ファイルにリンク情報を出力します。このコマンドで出力されるファイル形式は load-externs オプションに入力するためのファイルの記述にも使用できます。レポートの詳細については、リンカー依存の確認を参照してください。これは高度なオプションです。コンパイラオプションを定義する設定ファイルの場所を指定します。設定ファイルを指定した場合でも、コマンドラインから個々のオプションを設定することによって、対応する設定をオーバーライドできます。設定ファイルに含まれる相対パスは設定ファイルそのものの場所に相対したパスです。+= 演算子を使用して、この設定ファイルを別の設定ファイルにチェーンにします。設定ファイルを使用してコマンドラインコンパイラにオプションを指定する方法の詳細については、設定ファイルについてを参照してください。レポートの詳細については、リンカー依存の確認を参照してください。このオプションを使用すると、動的にリンクされた外部コンポーネントについて、コンパイル時にリンクチェックが実施されます。動的なリンク付けの詳細については、リンク付けについてを参照してください。これは高度なオプションです。次に例を示します。詳細については、『Flex 2 開発ガイド』のFlex アプリケーションのローカライズを参照してください。生成される SWF ファイルのメタデータを設定します。詳細については、SWF ファイルへのメタデータの追加を参照してください。生成される SWF ファイルのメタデータを設定します。詳細については、SWF ファイルへのメタデータの追加を参照してください。MXML ファイルの名前空間を指定します。この名前空間のコンテンツを定義するマニフェストファイルの URI と格納場所を含める必要があります。MXML ファイルに対する相対パスで指定します。
マニフェストファイルの詳細については、マニフェストファイルについてを参照してください。このオプティマイザを使用すると、SWF ファイルのバイトコードが最適化されるので、ファイルサイズが小さくなり、パフォーマンスが向上します。生成するファイルの出力先パスとファイル名を指定します。このオプションを省略すると、ターゲットファイルの格納ディレクトリに SWF ファイルが保存されます。デフォルトの SWF ファイル名はターゲットファイルの名前に SWF ファイル拡張子を付けたものです。相対パスでファイル名を定義する場合は、必ず、ターゲット MXML アプリケーションルートではなく現在の作業ディレクトリに相対させたパスを用います。該当するディレクトリが存在しない場合は、コンパイラにより、指定されたファイル名に基づく新しいディレクトリが作成されます。コンポーネントコンパイラでこのオプションを使用する場合は、SWF ファイルではなく SWC ファイルが出力されます。生成される SWF ファイルのメタデータを設定します。詳細については、SWF ファイルへのメタデータの追加を参照してください。生成される SWF ファイルのメタデータを定義します。これは高度なオプションです。リソースバンドルの SWC ファイルを生成するために compc コンパイラに入力するリソースバンドルのリストを出力します。filename パラメータはバンドルのリストが含まれたファイルの名前です。詳細については、『Flex 2 開発ガイド』のFlex アプリケーションのローカライズを参照してください。このアプリケーションで使用する RSL (ランタイム共有ライブラリ) のリストを指定します。RSL は実行時に動的にリンクされます。アプリケーションの配置場所に対して相対的な SWF ファイルの場所を指定してください。RSL の詳細については、ランタイム共有ライブラリの使用を参照してください。xml" ファイルの場所を指定します。このファイルは Flex データサービスで使用されます。Flash Player がバインドされたプロパティに対する変更を検出できない場合に、警告を表示します。コンパイラ警告の詳細については、SWC ファイルの使用を参照してください。警告およびエラーの表示の詳細については、警告とエラーの表示を参照してください。Flex コンポーネントの使用を避けることを促す警告を表示します。警告およびエラーの表示の詳細については、警告とエラーの表示を参照してください。スタイルシートまたは <mx:Style> ブロックのタイプセレクタがアプリケーションのどのコンポーネントによっても使用されていない場合に警告を表示します。ディレクトリまたはファイルをソースパスに追加します。Flex コンパイラは、Flex アプリケーションで使用される MXML または AS ソースファイルをソースパス内で検索し、コンパイル時に必要なものを含めます。ワイルドカードを使用して、複数のファイルやサブディレクトリを追加することもできます。個々のクラスまたはディレクトリではなく、ライブラリ SWC ファイル全体をリンクする場合は、library-path オプションを使用します。また、+= 演算子で新しいパラメータを既存のソースパスエントリのリストに追加することもできます。このオプションのデフォルトのビヘイビアは次のとおりです。未定義のプロパティと関数呼び出しを出力します。また、メソッド呼び出しに指定されている割り当てとオプションに対して、コンパイル時に型チェックが実行されます。警告およびエラーの表示の詳細については、警告とエラーの表示を参照してください。このアプリケーションで使用するテーマファイルのリストを指定します。テーマファイルには、CSS ファイルが含まれている SWC ファイル、または CSS ファイルを指定できます。SWC テーマファイルのコンパイルの詳細については、『Flex 2 開発ガイド』のスタイルとテーマの使用を参照してください。生成される SWF ファイルのメタデータを設定します。詳細については、SWF ファイルへのメタデータの追加を参照してください。現在のアプリケーションについてネットワークサービスの使用を指定します。ほとんどの場合は、このプロパティの値は true でなければなりません。Flex セキュリティの適用を参照してください。リソースバンドルを有効にします。詳細については、『Flex 2 開発ガイド』のFlex アプリケーションのローカライズを参照してください。これは高度なオプションです。行番号を含むソースコードを生成します。ランタイムエラーが発生すると、スタックトレースにこれらの行番号が表示されます。このオプションを有効にすると、生成される SWF ファイルのサイズが大きくなります。このオプションを有効にすると、デバッグ SWF ファイルは生成されません。MXML コンパイラのバージョン番号を返します。トライアル版またはベータ版の Flex を使用している場合は、さらに、トライアル期間の残り日数および有効期限を返します。指定した警告を有効にします。詳細については、警告とエラーの表示を参照してください。すべての警告を有効にします。警告をすべて無効にする場合は false に設定します。次のセクションには、コマンドラインで mxmlc アプリケーションコンパイラのオプションを使用する場合の例を記載します。
Flex 2 アプリケーションの構築とデプロイ > Flex アプリケーションの構築 > Flex コンパイラの使用 > コンポーネントコンパイラの使用 > パッケージ内のコンポーネントのコンパイル
パッケージ内のコンポーネントのコンパイル
コンポーネントを論理的なグループに分けてアプリケーションコードから切り離せるようにするため、コンポーネントはパッケージまたはディレクトリ構造内に作成されます。このため、パッケージ化されたコンポーネントには、パッケージ名またはパッケージ内のコンポーネントの場所を参照する一意の名前空間識別子を含む名前空間宣言を指定することができます。パッケージ化されたコンポーネントのコンパイル方法は、パッケージに含まれていないコンポーネントのコンパイル方法に似ています。ただし、SWC ファイルのコンパイル方法に関係なく、名前空間宣言でパッケージ名を使用する必要があるという点、およびパッケージ名にスラッシュではなくドット表記を使用する必要があるという点が異なります。設定ファイルには、これらのオプションが次の例のように表示されます。アプリケーションの MyButton クラスにアクセスするには、次の例のように、このパッケージを含む名前空間を宣言する必要があります。compc コンパイラを使用すると、複数のパッケージのコンポーネントを 1 つの SWC ファイルにコンパイルできます。次に、MXML アプリケーションで、各パッケージを個々の名前空間として定義します。
ルートの変数
このセクションでは、<Flex インストールディレクトリ> 変数について説明します。Flex データサービスの場合は、これは Flex データサービスをインストールする最上位ディレクトリとなります。このセクションでは、多くのファイルにとって最上位の場所となる "<Flex アプリケーションのルート>" ディレクトリについて説明します。アプリケーションサーバー上で Flex データサービスを WAR ファイルとしてデプロイする場合は、これが WAR ファイルのルートになります。
サーブレットの設定
swf" ファイルの要求を受け取るサーブレットが使用されます。これらのサーブレットは Web 層コンパイラを開き、SWF ファイルとラッパーをコンパイルして、返します。各 Flex データサービス Web アプリケーションには、Flex データサービスをカスタマイズするために編集できる設定ファイルが含まれます。xml" ファイルに定義されているサーブレットのいくつかについて説明したものです。Web 層コンパイラ用のサーブレットラッパーを定義します。このサーブレットは、すべての "*このサーブレットの定義には Web 層コンパイラの設定ファイルの場所が含まれます。このサーブレットは、すべての "*メッセージングサービスを管理します。xml" 設定ファイルの場所が含まれます。次の例に示すように、Flex が Web 層コンパイラを開くために使用するパターンを定義するサーブレットマッピングを表示できます。JRun が統合されたサーバーを使用している場合は、具体的な設定情報について、JRun の設定を参照してください。
座標系について
次の表に座標系の説明を示します。グローバル座標系は、コンポーネントのコンテキストから独立した、座標の全体集合を提供します。この座標系を使用する場面としては、オブジェクト間の距離を測定するときや、サブコントロールに対する相対座標から親コントロールに対する相対座標に座標を変換する際の中間点として、などが挙げられます。この座標系は、コンポーネントの左上隅を原点とします。ローカル座標系は、マウスポインタの位置に使用されます。どのコンポーネントにも、ローカル座標系を使用する mouseX プロパティと mouseY プロパティが存在します。この座標系は、コンポーネントの内容の左上隅を原点とします。ローカル座標やグローバル座標とは異なり、コンテンツ座標にはコンポーネントのコンテンツ領域がすべて含まれます。これには、現在クリッピングされていて、コンポーネントをスクロールしなければアクセスできない領域も含まれます。コンテンツ座標系は、絶対配置を使用するコンテナの子の位置を取得または設定するときに使用します。絶対配置の詳細については、コンポーネントの位置設定についてを参照してください。次の図は、各座標系が互いにどのような関係にあるかを示します。
座標プロパティおよびメソッドの使用
場合によっては、位置の座標系を変換しなければならないことがあります。たとえば、次のような場合に座標の変換が必要になります。MouseEvent クラスには、イベントターゲットのマウス位置をグローバル座標系で提供するプロパティとローカル座標系で提供するプロパティがあります。マウスイベントの位置を、可視領域ではなく Canvas コンテナのコンテンツ領域内で特定するには、コンテンツ座標系で位置を特定する必要があります。カスタムドラッグ & ドロップハンドラでオブジェクト固有のドラッグアクションを判断する際、ローカル座標系とコンテンツ座標系間の座標変換が必要となる場合があります。たとえば、スクロールバーの付いたコントロールがあり、そのコンポーネントの内容にドラッグしたときのマウス位置を知りたいときなどがそれに該当します。例 : Canvas コンテナでのマウス位置の使用の例は、この使用法を示しています。
スクロールバーや仕切りなどのビジュアルエレメントとコンテンツエレメントをどちらも含むカスタムレイアウトコンテナ
たとえば、子の間に線を描画するカスタムコンテナがある場合は、線を描画するために、各々の子の位置をコンテナのコンテンツ座標で表す必要があります。イベントハンドラでマウス座標を使用することがよくありますが、その場合は次の点に留意してください。マウスイベントを処理するときは、可能であれば MouseEvent オブジェクトの座標を使用するのが最適です。その理由は、MouseEvent オブジェクトの座標はイベントが生成されたときのマウス座標を表すためです。コンテナの contentMouseX プロパティと contentMouseY プロパティを使用してマウスポインタの位置をコンテンツ座標系で取得することもできますが、そうではなく、イベントオブジェクトからローカル座標値を取得し、それをコンテンツ座標系に変換するようにしてください。イベントオブジェクトに格納されたローカル座標 (MouseEvent の localX プロパティと localY プロパティなど) を使用するときは、イベントプロパティに格納されているマウスのローカル座標はイベントターゲットに対する相対値であることを覚えておく必要があります。ターゲットコンポーネントがコンポーネント自体ではなく、たとえば Button コンポーネントの中の UITextField のように、位置を特定するコンポーネントのサブコンポーネントである場合があります。そのような場合には、ローカル座標をいったんグローバル座標系に変換してから、そのグローバル座標をコンテンツ座標のコンテナに変換する必要があります。
座標変換プロパティおよびメソッド
すべての Flex コンポーネントには、座標系の使用とその変換に使用できる 2 つの読み取り専用プロパティと 6 つの関数があります。これらのプロパティと関数を次の表に示します。
プロパティまたは関数
マウスの x 座標をコンポーネントのコンテンツ座標で返します。マウスの y 座標をコンポーネントのコンテンツ座標で返します。x 座標と y 座標を含む Point オブジェクトをコンテンツ座標系からグローバル座標系に変換します。Point オブジェクトをコンテンツ座標系からコンポーネントのローカル座標系に変換します。Point オブジェクトをグローバル座標系からコンポーネントのコンテンツ座標系に変換します。Point オブジェクトをグローバル座標系からコンポーネントのローカル座標系に変換します。Point オブジェクトをローカル座標系からコンポーネントのコンテンツ座標系に変換します。Point オブジェクトをローカル座標系からグローバル座標系に変換します。この例では代わりに localX プロパティと localY プロパティを使用して、ローカル座標とコンテンツ座標間の変換方法 (たとえば、最初の変換からグローバル座標を使用するまでの間、どのようにして正しい基準座標系を維持しているか) を示しています。Button コントロールはきわめて使用頻度の高い四角形のボタンです。Button コントロールの表面にはテキストラベルやアイコンが表示され、実際に押せるような外観を備えています。オプションで複数の Button 状態のそれぞれにグラフィックスキンを指定できます。標準 Button コントロールは、コントロールの選択後マウスボタンが押されている限りダウン状態に留まります。トグル Button コントロールは、2 回目に選択されるまでダウン状態に留まります。通常、ボタンはイベントリスナーを使用して、ユーザーがコントロールを選択したときのアクションを実行します。ボタンをアプリケーションの外観と機能に合わせてカスタマイズするには、カスタマイズしたグラフィックスキンを使用します。Button コントロールには、アップ状態、ダウン状態、および無効状態に対応して異なるイメージスキンを設定でき、ボタンが選択されているかどうかに応じてこれらの状態のスキンを変えることができます。このコントロールは、イメージスキンを動的に変更できます。次の例は、HBox レイアウトコンテナに配置されているビデオの録画と再生を制御する 7 つの Button コントロールを示しています。すべてのボタンはアップ状態となっています。Button コントロールには、次のデフォルトプロパティがあります。ラベルテキストやアイコンを表示するために必要なサイズです。
サイズ設定時の縦横比の維持
イメージの縦横比とは、イメージの高さと幅の比率のことです。640 x 480 ピクセルの解像度に設定されたコンピュータのモニタでも、4:3 の縦横比が使用されています。正方形の縦横比は 1:1 になります。すべてのイメージは、本来の縦横比を持っています。Image コントロールの height プロパティおよび width プロパティを使ってイメージのサイズを変更した場合、イメージが歪んで表示されないように、デフォルトで縦横比が維持されます。イメージの縦横比を維持するため、<mx:Image> タグで指定された高さと幅で完全に描画することができない場合もあります。たとえば、元のイメージが 100 x 100 ピクセル、縦横比 1:1 の正方形のとき、次のステートメントでイメージをロードしたとします。この例では、サイズ変更されたイメージに対して正方形の領域が指定されていません。デフォルトでは、Flex によりイメージの縦横比が維持されるため、イメージのサイズは、サイズ上の制約に従いながら縦横比を維持できる最大の大きさ、つまり、150 x 150 ピクセルに変更されます。ただし、この空白の領域も <mx:Image> タグで確保されているため、他のコントロールやレイアウトエレメントが利用することはできません。Resize エフェクトを使用することにより、トリガに反応してイメージの幅と高さを変更できます。Resize エフェクトを構成するときに、イメージの新しい高さと幅を指定します。デフォルトでイメージの縦横比が維持されるため、イメージは縦横比を維持しつつ、可能な限り新しいサイズに合うようにサイズ変更されます。次の例では、イメージの内側にマウスポインタを重ねるとイメージが拡大され、イメージの外側にマウスポインタを移動すると元のサイズに戻ります。Resize エフェクトの詳細については、ビヘイビアの使用を参照してください。次の例は、縦横比に無関係に Flex のロゴの高さと幅のプロパティに明示的に値を指定してサイズを変更しています。縦横比を維持しない設定を選択することにより、イメージにあえて歪みを適用することもできます。次の例では、イメージのサイズ変更で縦横比が維持されないため、イメージが歪んでいます。イメージの絶対位置を指定するには、Image コントロールの x プロパティと y プロパティを使用します。その他のすべてのコンテナでは、子の位置がコンテナによって制御され、x と y のプロパティは無視されます。x プロパティと y プロパティは、Canvas コンテナのイメージの左上隅の位置を指定します。
次の例では、イメージの位置を (40
これで次のようなアプリケーションになります。Image コントロールの visible プロパティを使用すると、ロードしたイメージを非表示の状態にすることができます。デフォルトでは、イメージは表示状態になります。次の例は、イメージをロードし、そのイメージを非表示の状態にしています。イメージを非表示の状態に設定したとしても、VBox コンテナは、子をレイアウトするときに、イメージ用の領域を確保します。したがって、VBox はイメージファイルと同じサイズとなり、このアプリケーションで、<mx:Image> タグの後に Button コントロールを追加しても、イメージを表示状態にした場合と同じ位置にボタンが表示されます。デフォルトでは、includeInLayout プロパティは true に設定されているため、イメージが非表示になっていても、表示されているかのようにサイズと位置がコンテナによって設定されます。visible プロパティは、特定のイメージだけを表示して、それ以外を非表示にするような場合に利用します。たとえば、アプリケーションの領域に対し、3 つのイメージのうち、ユーザーの操作に基づいて、いずれか 1 つだけを表示したい場合があります。次の例では、ユーザーがボタンをクリックすると、イメージの visible プロパティが true に設定されて、このイメージが表示されます。次の例は、ユーザーがボタンをクリックする前後の状態を示しています。visible プロパティの設定を使用して、イメージをロードするタイミングを制御することもできます。ページがロードされるときに、イメージを不可視状態にしたまま領域のみを割り当てることにより、パフォーマンスの低下を初期化段階に集中させることができます。アプリケーションが初期化された後のインターフェイスでは既にイメージがロードされているため、ユーザーはイメージを使った操作を快適に実行することができます。また、アプリケーションのサイズ変更や再レイアウトに伴う外観の乱れも、visible プロパティを設定することにより防ぐことができます。
Image コントロールの使用テクニック
製品カタログでは、ユーザーが商品をクリックすると、その商品のイメージが表示される、という手法がよく使われています。カタログ作成のテクニックの 1 つとして、カタログのイメージをすべて非表示状態にした上でアプリケーションにロードする方法があります。ユーザーが商品を選択すると該当するイメージが表示される、というものです。ただし、この方法では、カタログに掲載するすべてのイメージについて Image コントロールを追加し、アプリケーションの起動時にイメージ (非表示) をロードしなければなりません。すべてのイメージを取り込まなければならないので、SWF ファイルのサイズが不必要に大きくなってしまうばかりか、非表示のイメージをロードすることにより、起動時間に悪影響が及ぶ可能性があります。もっと効率のよい方法は、イメージを必要に応じてサーバーからダイナミックにロードすることです。非表示のイメージを格納する必要がないため SWF ファイルのサイズを抑えることができ、起動時間も短縮されます。イメージを作成した後で、イメージファイルを動的にロードする load() メソッドなど、SWFLoader コントロールのプロパティとメソッドを使用してイメージを操作できます。このメソッドで SVG ファイルをロードすることはできません。この例では、アプリケーションがローカルファイルシステムのイメージにアクセスしています。イメージは URL によって埋め込みまたはアクセスされていません。load() メソッドを呼び出しても、イメージを保持するコンテナは子のレイアウトを調整しません。そのため、置き換えるイメージは同じサイズにするのが普通です。新しいイメージが元のイメージと比べあまりに大きい場合、コンテナの他のコンポーネントが覆い隠されてしまいます。置き換えるイメージは、アプリケーションでユーザーが行ったアクションに基づいて選択します。たとえば、ユーザーがリストボックスやデータグリッド内で選択した内容に基づいてイメージをロードすることができます。次の例では、データグリッド内で選択されたアイテムのインデックス番号を使用して、ロードするイメージを決定しています。
この例では、グリッド内のアイテムに対応する "1
jpg" のような名前がイメージに付けられています。// グリッド内で選択されたアイテムに対応するイメージを取得します。
イメージのパスは、ディレクトリ名、インデックス番号、およびファイル拡張子 (この関数を、次に示すように、change イベントのイベントリスナーとしてデータグリッドに登録する必要があります。ユーザーがデータグリッド内で別のアイテムを選択すると、Flex によって getImage() 関数が呼び出され、表示されるイメージが更新されます。この例では、選択されたアイテムのインデックスを使用してロードするイメージを決めていますが、選択されたアイテムの情報を使用してロードするイメージが決定されるように変更することも可能です。たとえば、グリッドに一連のオブジェクトがあり、各オブジェクトには対応するイメージ名を持つプロパティがあるとします。このプロパティを利用してプログレスバーを表示することにより、アプリケーションが単に処理を行っているだけで、フリーズしたわけではないことをユーザーに伝えることができます。ColorPicker コントロールを使用すると、ユーザーはドロップダウン色見本パネル (パレット) から色を選択できます。このコントロールは、最初に選択された色付きのプレビューサンプルとして表示されます。ユーザーがコントロールを選択すると、色見本パネルが表示されます。このパネルには、選択した色のサンプルと色見本パネルが含まれています。ColorPicker コントロールを開くと、アプリケーションの他のコントロール上に色見本パネルが拡張します。通常、下方向に開きます。色見本パネルがアプリケーションの下側の境界内には収まらないが、ColorPicker ボタンより上で収まる場合は、上方向に開かれます。Flex は、データプロバイダから色見本パネルとテキストボックスを作成します。デフォルトでは、このコントロールは、すべての Web セーフカラーを含むデータプロバイダを使用します。独自のデータプロバイダを使用する場合、次の項目を指定できます。表示する色 独自のデータプロバイダを使用する場合、色を指定する必要があります。テキストボックスに表示する色用のラベル テキストラベルを指定しない場合、16 進数のカラー値が使用されます。各色に関する追加情報この情報には、ID や説明コメントなど、アプリケーションに使用できる任意の情報を指定できます。次の図に、カラーラベル値を含むカスタムデータプロバイダを使用する展開された状態の ColorPicker コントロールを示します。このコントロールは、スタイルを使用して表示エレメントのサイズも設定しています。この種のデータプロバイダの詳細については、データプロバイダおよびコレクションの使用を参照してください。データプロバイダを省略すると、Web セーフカラーを使用するデフォルトのデータプロバイダが使用されます。データプロバイダは、色の配列でも、オブジェクトの配列でもかまいません。より複雑なデータプロバイダの使用方法については、オブジェクトを使用した ColorPicker コントロールの作成を参照してください。例については、カスタムフィールド名の使用を参照してください。ColorPicker コントロールは、色見本パネルが開かれたときに open イベントを送出し、ユーザーの操作によってコントロールの値が変化したときに change イベントを送出します。
オブジェクトの配列から作成した場合、target
selectedItem フィールドには選択されたアイテムに対応するオブジェクトへの参照が設定されます。n はアイテムの総数です。ColorPicker コントロールのデータは、オブジェクトの配列を使用して設定することもできます。label フィールドの値は、色見本パネルのテキストフィールドのテキストを決定します。オブジェクトに label フィールドがない場合、テキストフィールドの color フィールドの値が使用されます。この例では、selectedItem プロパティには、選択されたアイテムを定義するオブジェクトへの参照が設定されています。この例ではまた、ColorPicker の複数のプロパティとスタイルを使用して、コントロールのビヘイビアと外観を指定しています。editable プロパティは、ユーザーがカラーラベルボックスに値を入力できないようにしています。このため、ユーザーはデータプロバイダからしか色を選択できなくなります。
カスタムフィールド名の使用
たとえば、データがカスタムの列名が設定されている外部データソースの場合が挙げられます。次のコードは、前の例を変更して、cName および cVal というカスタムのカラーフィールドとラベルフィールドを使用するようにしています。
ユーザーの操作
編集不可能な ColorPicker コントロールでは、ユーザーは色見本パネルオプションの中から色を選択する必要があります。編集可能な ColorPicker コントロールでは、ユーザーは色見本パネルアイテムを選択するか、色見本パネル上部にあるラベルテキストフィールドに 16 進数のカラー値を直接入力できます。テキストボックスには、数字および範囲が a ~ f や A ~ F の大文字または小文字を入力できます。他の数値以外の文字はすべて無視されます。
マウスの操作
マウスを使用すると、移動してコントロールから選択できます。畳まれた状態のコントロールをクリックすると、色見本パネルを表示または非表示にできます。色見本パネルの見本をクリックすると、色見本を選択してパネルを閉じることができます。パネル領域の外をクリックすると、選択せずにパネルを閉じることができます。テキストフィールド内をクリックすると、テキスト入力カーソルを移動できます。また、次のキーストロークを使用してドロップダウンリストを制御できます。色見本パネルを開き、選択した色見本のフォーカスを配置します。色見本パネルが開いている場合、閉じます。選択した色を色見本パネルの行の最初の色の位置に移動します。列が 1 つしかない場合は無効です。選択した色を色見本パネルの行の最後の色の位置に移動します。列が 1 つしかない場合は無効です。選択した色を色見本パネルの列の一番上の色の位置に移動します。列が 1 つしかない場合は無効です。選択した色を色見本パネルの列の一番下の色の位置に移動します。列が 1 つしかない場合は無効です。このキーはほとんどの Web ブラウザでサポートされていません。色見本パネルから現在の色を選択して、色見本パネルを閉じます。色見本をクリックするのと同じ効果です。フォーカスが編集可能な ColorPicker のテキストフィールドにある場合、フィールドテキストに指定された色を選択します。色見本パネルが開いている場合、フォーカスを色見本グリッドの上下左右にある次の色に移動します。単一行の色見本パネルでは、上矢印キーと右矢印キーが同等で、下矢印キーと左矢印キーが同等となります。複数行の色見本パネルでは、選択した色が前後の行の先頭または末尾に折り返されます。単一行の色見本パネルでは、行の先頭または末尾を超えてキーを押すと、行が折り返されます。色見本パネルを閉じたもののまだフォーカスがある場合、上矢印キーと下矢印キーが無効になります。左矢印キーと右矢印キーでは、ColorPicker の選択を変更し、パネルが開いている場合と同様に色の間を移動できます。色見本パネルが開いている場合、Tab キーや Shift + Tab キーを使用してフォーカスを別のオブジェクトに移動させることはできません。
ビジーカーソルの設定
ビジーカーソルを表示します。カーソルリストからビジーカーソルを削除します。他のビジーカーソル要求がカーソルリスト内でまだアクティブな場合、つまり setBusyCursor() メソッドを 2 回以上呼び出していた場合には、ビジーカーソルがリストからすべて削除されるまで、ビジーカーソルは消えません。カーソルの作成と削除にある例を修正して、デフォルトのビジーカーソルを使用するようにしたものを、次の例に示します。ビジーカーソルを設定しても、ユーザーによるアプリケーションの操作に影響はなく、ユーザーはテキストの入力やボタンの選択を行うことができます。ただし、すべてのコンテナは、enabled プロパティをサポートします。デフォルトでは true に設定され、コンテナとその子に対するユーザー操作が可能となっています。あるコンテナの enabled プロパティを false に設定すると、ビジーカーソルが表示されているときは、そのコンテナとそのすべての子のカラーがグレー表示になり、そのコンテナおよび子には入力できなくなります。したがって、より高い優先度のカーソルがカーソルリストにある場合は、そのカーソルを削除しない限り、ビジーカーソルは表示されません。デフォルトで高い優先度を持つビジーカーソルを作成するには、次の例に示すように setCursor() メソッドを使用します。これにより、ビジーカーソルに高い優先度を設定します。このプロパティを使用すると、該当のクラスでデータのロードが完了するまで自動的にデフォルトのビジーカーソルが表示されます。次の例では、showBusyCursor プロパティを使用して、ビジーカーソルの設定で挙げた例を簡素化する方法を示しています。グローバル設定ファイルには、データベースの設定および動作のための宣言を格納します。マッピングファイルには、Java のクラスとフィールドをデータベースのテーブルと列にマップする方法を示した宣言を格納します。Hibernate では、Web アプリケーションのクラスパス内でこれらのファイルにアクセスできることが必要になります。クライアントコードでは、fill パラメータ引数を使用してこれらのクエリにパラメータを提供できます。FDS の競合モードが定義されている場合は、Hibernate の自動競合検出を使用することを示す警告がログに記録されます。このオプションを使用した場合は、信頼性のないコードによって実行される任意のクエリを公開することになります。このオプションはプロトタイプ作成の場合にのみ使用し、運用環境用のアプリケーションを展開する場合は展開前に名前付きクエリに切り替えてください。このクラスの詳細については、公開されている『Flex データサービス Javadoc マニュアル』を参照してください。宛先のサーバーセクションで設定をしなくても、Hibernate アセンブラを使用してデータをリレーショナルデータベースに永続化することが可能です。Java の Date 型をデータベースの日付型やタイムスタンプ型にマッピングする処理など、場合によっては、このアプローチを Hibernate マッピング内のパラメータ宣言にオーバーライドする必要性が高くなります。Data Management Service 機能は、クライアントサイド機能とサーバーサイド機能を組み合わせて使用し、複数のクライアントとサーバー層との間でデータを分散します。
データの流れについて
データ同期の競合の解決
RPC 機能とは異なり、Data Management Service 機能では、複数のクライアント上のデータとサーバーサイドデータリソース上のデータからなる共通のデータセットについて、自動および手動の同期がサポートされています。また、状況に応じて接続するクライアントに対して、オフラインでのクライアントサイドデータの永続性もサポートされています。RPC コンポーネントとは異なり、DataService コンポーネントでは、オブジェクトにバインドするための静的な結果を返すリモートサービスの処理やメソッドを直接呼び出すことはありません。
データの流れについて
データメッセージはメッセージチャネルを経由してネットワーク層間で受け渡されます。メッセージチャネルによって、メッセージのプロデューサとコンシューマが宛先に接続されます。データベースやディレクトリなどのバッキングデータストアに対する変更は、Data Management Service やクライアントアプリケーションには自動的には伝播されません。そして、これらの変更が他のクライアントに伝播されます。
データ同期の競合の解決
複数のクライアントで同じデータ部分が同時に変更された場合、データ同期の競合が発生する可能性があります。競合解決の実装に必要なサーバーサイドコードの量は、使用するアダプタのタイプによって異なります。競合の例外を処理するクライアントの ActionScript コードは、アプリケーションにとって最適な方法で記述できます。
中括弧を使用したデータバインディング
中括弧シンタックスの使用は、アプリケーションでオブジェクト間のデータの受け渡しを行うための最も簡単な方法です。このシンタックスを使用する場合、宛先プロパティの値となるバインディングソースを中括弧 ({ }) で囲みます。次の例では、あるデータモデルに対するバインディングのソースとして、コントロールの複数のプロパティを使用しています。データモデルの詳細については、データの格納を参照してください。たとえば、次のタイプのバインディングで中括弧のシンタックスを使用できます。
中括弧内の 1 つのバインド可能プロパティ
中括弧内にバインド可能プロパティを含むストリングの連結
中括弧内のバインド可能プロパティの計算
バインド可能プロパティ値を評価する条件演算
次の例は、各タイプのバインディング式を使用するデータモデルを示しています。次の例のコードには、XML オブジェクトからのデータをバインドする 3 つのバインディング式が中括弧内にあります。ActionScript 関数をバインディング式のソースとして使用するのは、通常、関数の引数としてバインド可能プロパティを使用している場合です。バインド可能プロパティが変更されると関数が実行され、結果がバインディング先で使用されます。例を次に示します。inString プロパティを引数として渡さず、関数の内部から参照している場合は、inString プロパティが変更されても関数は呼び出されません。次に、この関数をバインディング式の中で使用します。
バインディングメカニズムについて
実行時に、バインディングソース式の構成要素に基づく変更イベントによって Watcher オブジェクトがトリガされ、その Watcher オブジェクトから Binding オブジェクトがトリガされて、バインディングが実行されます。可能な限り最良のバインディング結果を得るためには、変数の型指定を厳密に行う必要があります。selectedItem が、モデルまたは RPC サービスの結果ではなく実際のカスタムクラスである場合は、次に示すバインディング式のようにキャストする必要があります。
バインド可能プロパティチェーンの使用
バインディング機能を使用する際の注意事項
データバインディングのデバッグ
バインド可能プロパティチェーンの使用
データバインディングのソースとしてプロパティを指定すると、そのプロパティの変更だけでなく、そのプロパティが含まれるプロパティチェーンも監視されます。宛先プロパティを含むプロパティのチェーン全体は、"バインド可能プロパティチェーン" と呼ばれます。バインド可能プロパティチェーン内の指定したプロパティが変更された場合には、イベントを生成する必要があります。プロパティが [Bindable] メタデータタグによってマークされている場合は、Flex コンパイラによって自動的にイベントが生成されます。[Bindable] メタデータタグでイベント名を省略した場合は、Flex コンパイラによって propertyChange というイベントが自動的に生成されて送出されるため、プロパティをデータバインディング式のソースとして使用できます。また、オブジェクトを既知の型にキャストすることによって、オブジェクトに関する詳しい情報をコンパイラに提供する必要があります。場合によっては、バインディングが意図したとおりに自動的に実行されないことがあります。dataProvider プロパティのアイテム全体を変更した場合には、バインディングは自動的には実行されません。また、次の例のように、プロパティのサブプロパティが [Bindable] メタデータを持つ場合にも、バインディングは自動的には実行されません。// バインディングはトリガされます。// バインディングはトリガされません。次のいずれかの方法で問題を解決できます。temp を、バインド可能な label プロパティを使用して、厳密に型指定されたオブジェクトにします。mouseX プロパティなど、Flash Player によって自動的に更新されるプロパティにデータをバインディングする場合にも、バインディングは自動的には実行されません。これらのメソッドにより、意図したとおりに行われないバインディングを実行できます。変更を加えてもバインディングが実行されない場合にユーザーインターフェイスを更新するには、executeChildBindings() メソッドへの呼び出しなどのコードを 1 行追加します。
データモデルについて
"データモデル" とは、アプリケーション固有のデータを格納するためのプロパティを持つ ActionScript オブジェクトです。Adobe Flex アプリケーションとサーバーの間の通信が必要になるのは、Flex アプリケーションが入手できないデータを取得するときと、Flex アプリケーションからの新しいデータでサーバーサイドのデータソースを更新するときだけです。データモデルを使用して、Flex アプリケーションからサーバーへ送信する前のデータを格納したり、サーバーから送られてきたデータをアプリケーションで使用するまで格納したりします。データモデルはデータ検証に使用できます。また、データモデルにクライアントサイドのビジネスロジックを含めることができます。アプリケーションの計画を立てる際に、アプリケーションで格納する必要のあるデータの種類や、データの操作方法を決定します。これにより、必要なデータモデルの種類が決まります。たとえば、従業員のデータを格納するアプリケーションを作成するとします。単純な従業員モデルには、名前、部署、電子メールアドレスなどのプロパティを含めます。xml" ファイルを参照によってインクルードしているファイルのサービス定義で設定します。宛先では、RPC サービスのクラスまたは URL、使用するトランスポートチャネル、サービスへのアクセスに使用するアダプタ、および宛先をセキュリティ保護するための設定を、それぞれ指定します。基本認証では、Web アプリケーションコンテナの標準の J2EE 基本認証が利用されます。xml ファイルで設定します。xml" ファイルを参照によってインクルードしているファイルで設定します。サービス宛先のセキュリティ保護の詳細については、RPC サービスの設定を参照してください。HTTP サービスおよび Web サービスの設定もこの例とほぼ同様です。あるいは、サポートされている他のいずれかのメッセージチャネルを使用することもできます。メッセージチャネルの詳細については、メッセージチャネルの設定を参照してください。宛先の設定の詳細については、RPC サービスの設定を参照してください。
宛先の設定について
xml" ファイルを参照によってインクルードしているファイルで、最も頻繁に実行する作業です。宛先を設定するときはメッセージチャネルを指定します。メッセージチャネルは、対応するサーバーサイドのオブジェクトまたはサービスに接続するために使用できます。また、アダプタも参照できます。アダプタは、オブジェクトやサービスと直接やり取りするサーバーサイドコードです。デフォルトアダプタを設定すると、宛先ごとにアダプタを明示的に参照せずに済ませることができます。サービスには、セキュリティ制限を参照している宛先が含まれています。例ではこのセキュリティ制限も示しています。宛先では、サービスレベルで定義された java-object というデフォルトアダプタが使用されます。
HTTP サービスのデフォルト宛先
宛先ではメッセージチャネルを参照します。メッセージチャネルは同じ設定ファイル内の任意の場所で定義します。特定の宛先でチャネルを明示的に参照するのではなく、デフォルトチャネルを設定ファイル内でサービスレベルで参照することもできます。メッセージチャネルの詳細については、メッセージチャネルの設定を参照してください。サービス定義には、サービス要求に対して機能するアダプタの定義が含まれます。デフォルトアダプタを定義すると、宛先定義ごとにアダプタを明示的に参照せずに済ませることができます。アダプタをデフォルトアダプタにするには、アダプタのデフォルトプロパティの値を true に設定します。このアダプタはデフォルトアダプタとして設定されます。セキュリティ制限は、ユーザーが宛先にアクセスできるようにする前にユーザーの認証および承認を行う場合に使用します。認証では、基本認証を使用するかカスタム認証を使用するかを指定できます。承認では、承認に必要なロールを指定できます。セキュリティ制限は宛先定義内でインラインで宣言できます。または、セキュリティ制限をグローバルに宣言し、宛先定義内でその id によって参照できます。セキュリティの詳細については、宛先のセキュリティ保護を参照してください。
HTTP サービスのデフォルト宛先
HTTP サービスのデフォルト宛先は、Flex サービス設定ファイル、またはサービス設定ファイルを参照によってインクルードしているファイルで、設定できます。HTTP サービスアダプタの詳細については、HTTP サービスのプロパティを参照してください。
Flex 2 アプリケーションの構築とデプロイ > Flex アプリケーションの構築 > コマンドラインデバッガの使用デバッグについて > コマンドラインデバッガの使用
コマンドラインデバッガの使用
fdb を起動するには、コマンドプロンプトを開き、このディレクトリに移動し、「fdb」と入力します。使用可能なコマンドの説明については、次のチュートリアルコマンドを使用してください。fdb デバッガの概要については、次のチュートリアルコマンドを使用してください。Flex アプリケーションをデバッグするには、最初にデバッグ SWF ファイルを生成する必要があります。デバッグ SWF ファイルはその他のアプリケーション SWF ファイルに似ていますが、デバッガおよびデバッガ版の Flash Player がデバッグセッション中に使用するデバッグ固有の情報が含まれているという点が異なります。デバッグ SWF ファイルは、デバッグ以外の SWF ファイルよりもサイズが大きくなります。したがって、このファイルを生成するのはこのファイルでデバッグする場合のみにしてください。運用モードが有効にされていない限り、Web 層コンパイラでは、debug クエリ文字列パラメータでデバッグ SWF ファイルの生成が設定されていれば、このファイルが生成されます。デバッガはこの接続を使用して SWF ファイルの情報をコマンドラインに転送し、ブレークポイントの追加、変数の調査、および一般的なデバッグタスクを実施できるようにします。
コマンドラインデバッガの制限
Flash タイムラインの概念はサポートされません。デバッガは、MXML タグのスクリプトコード内部へのブレークポイントの追加もサポートしていません。ブレークポイントは、MXML タグについて定義されたイベントハンドラ上で設定できます。デバッガは、アプリケーションのサーバーサイド部分をデバッグする上では役立ちません。
コマンドラインデバッガのショートカット
簡単なキー操作を使用して、fdb デバッガ内からコマンドを開くことができます。たとえば、print コマンドを呼び出す場合は、p で始まるコマンドがこれ以外にないので、p と入力することができます。
デフォルトのブラウザの使用
Web ブラウザでアプリケーションをデバッグする場合、fdb はデフォルトのブラウザでプレーヤーを開きます。"デフォルトのブラウザ" は、アプリケーションを指定せずに Web 固有のファイルを開いたときに起動するブラウザです。コンピュータに最初にインストールしたブラウザがデフォルトのブラウザとは限りません。
デフォルトのブラウザを確認するには :
[ファイル名を指定して実行] をクリックします。[ファイル名を指定して実行] ダイアログボックスで、次の例のように URL を入力します。デフォルトのブラウザが表示されるか、要求に対応するよう設定されているアプリケーションがないことを示すエラーメッセージが表示されます。
x をデフォルトのブラウザとして設定するには:
[ツール]-[インターネット オプション] を選択します。[プログラム] タブをクリックします。[ツール]-[オプション] を選択します。[一般] アイコンを選択し、一般設定を表示します。[起動時に Firefox が既定のブラウザであるか確認する] チェックボックスをオンにします。メッセージが表示されない場合は、FireFox は既にデフォルトのブラウザになっています。
ソースファイルについて
fdb がステップインするファイルの一部は外部クラスファイルで、Flex コンパイラで生成されたファイルもあります。Flex は多くのソースファイルを生成するので、アプリケーションをデバッガ内部から移動できます。デバッグ中のアプリケーションで使用されるファイルのリストは、info files コマンドで確認できます。詳細については、ステータスの取得を参照してください。生成された ActionScript クラスファイルはコンパイル単位として参照されることもあります。コンパイル単位の詳細については、インクリメンタルコンパイルについてを参照してください。
Flex 2 開発ガイド > データアクセスと相互接続性 > データサービスの設定 > メッセージチャネルの設定
メッセージチャネルの設定
Flex データサービスでは、Flex メッセージングシステムの一部であるメッセージチャネルを経由して、サービスの宛先との間でメッセージが相互に伝達されます。任意のタイプのサービスと任意のタイプのチャネルを、ペアにすることができます。データのセキュリティを必要とする場合は、いずれかのセキュアなチャネルを使用してください。チャネル定義はデータサービス設定ファイルで作成します。各チャネル定義のエンドポイント URI は一意である必要があります。AMF エンドポイントを繰り返しポーリングするように AMF ポーリングチャネルを設定することで、クライアントプルのメッセージコンシューマを作成できます。ポーリングの発生間隔はチャネル上で設定できます。次の例は AMF チャネル定義を示しています。チャネル定義の前には、その定義を参照する宛先が付きます。ChannelSet オブジェクトを作成して実行時にクライアントでチャネルを割り当てることもできます。次の例に示すように、ChannelSet をサービスコンポーネントに割り当てます。ChannelSet オブジェクトではセット全体が検索され、接続可能なチャネルが見つけられます。宛先が認識する ID を指定することをお勧めしますが、ID の確認が不要な場合は null を渡すことができます。このプロパティを使用すると、ActionScript でチャネルを直接設定して、チャネルから宛先への接続を試みたときにこのエンドポイント URI の配列全体にわたってフェイルオーバーを発生させるようにすることができます。接続プロセスでは、最初のチャネルが検索され、そのチャネルへの接続が試みられます。この接続に失敗した場合、チャネルでフェイルオーバー URI が定義されていれば、それぞれの URI が試みられ、すべて失敗した場合はそのチャネルが断念され、次に使用可能なチャネルが ChannelSet で検索されます。セット内のどのチャネルへの接続もできなかった場合、保留されている未送信のメッセージがあればクライアントで失敗が生成されます。Flex データサービスでは次のメッセージチャネルがサポートされています。
RTMP エンドポイントへの接続に使用するチャネル
リアルタイムのメッセージングとサーバープッシュのブロードキャストをサポートします。次の例は RTMP チャネル定義を示しています。root トークンは使用できません。name トークンは使用できますが、クラスタ化の使用時は使用できません。ファイアウォールを設置している場合は、RTMP トラフィックを許可するために、RTMP エンドポイントに割り当てたポートを開く必要があります。デフォルトの動作は、必要に応じて上限なしで大きくなるキャッシュスレッドプールを使用するためのものです。
AMF エンコードされたメッセージを AMF エンドポイントに送信するために使用するチャネル
このチャネルをパブリッシュ/サブスクライブメッセージングに使用する場合は、通常はチャネル定義で polling プロパティを true に設定します。また、ポーリング間隔をチャネル定義で設定することもできます。次の例は AMF チャネル定義を示しています。
AMF エンコードされたメッセージを AMF エンドポイントに送信するために使用するチャネル
このチャネルをパブリッシュ/サブスクライブメッセージングに使用する場合は、チャネル定義で polling プロパティを true に設定します。また、ポーリング間隔をチャネル定義で設定することもできます。次の例は、ポーリングを有効にした AMF ポーリングチャネル定義を示しています。このチャネルは、リアルタイムのメッセージングとサーバープッシュのブロードキャストをサポートします。このチャネルではデジタル証明書が必要です。また、キーストアファイル名とパスワードを指定するための子エレメントが含まれます。次の例はセキュアな RTMP チャネル定義を示しています。キーストアファイルは必ずしも示された場所に存在するとは限りません。Java keytool ユーティリティを使用して、公開キーと秘密キーのペア、および自己署名証明書を作成できます。オプションで、リムーバブルメディアなどの別のファイルにキーストアのパスワードを保存することができます。また、SSL 使用時のデフォルトの JVM アルゴリズムの代わりに、代替 JVM アルゴリズムを指定することもできます。
デフォルトの JVM アルゴリズムは、セキュリティプロパティ ssl
通常は、デフォルトのアルゴリズムを使用し、このプロパティを省略してください。使用できる値は次のとおりです。Sun セキュリティプロバイダが必要です。IBM セキュリティプロバイダが必要です。root トークンは使用できません。name トークンは使用できますが、クラスタ化の使用時は使用できません。ファイアウォールを設置している場合は、RTMP トラフィックを許可するために、RTMP エンドポイントに割り当てたポートを開く必要があります。AMF チャネルとは別のエンドポイントとクラスを使用します。次の例はセキュアな AMF チャネル定義を示しています。
HTTP エンドポイントへの接続に使用するチャネル
HTTP 要求および応答をサポートします。このチャネルはテキストベースの (XML) メッセージ形式を使用します。次の例は HTTP チャネル定義を示しています。使用した場合、循環オブジェクト間の参照が失われ、エンドポイントで参照のクローンが作成されたような状態になります。これは従来の機能です。要求の MIME タイプが正しくなかった場合に、これを使用して要求を別の URL にリダイレクトできます。HTTP チャネルとは別のチャネルクラスを使用します。次の例はセキュアな HTTP チャネル定義を示しています。Flex が Java オブジェクトの適切なメソッドを探す際には、さらに穏やかな変換方法が使用されます。クライアント側のデータ型が Boolean や String などの単純な型ならば、多くの場合はリモート API に完全に一致しますが、完全に一致しない場合にも、Java オブジェクトの適切なメソッドを見つけるために単純な変換処理が試行されます。厳密な配列は、すべてのインデックスが Number 型の配列です。結合配列は、String 型のインデックスが少なくとも 1 つ含まれる配列です。Java オブジェクトのメソッドの呼び出しに使用されるパラメータのデータ型は、この配列の種類によって変わるため、いずれの種類の配列をサーバーに送信するのかについて認識しておく必要があります。
単純なデータ型の変換
サポートされている Java 型バインディング
型がインターフェイスの場合は、次のインターフェイス実装にマップされます。Collection のカスタム実装の新しいインスタンスはその型にバインドされます。
(世界標準時 (UTC) に対応するようにフォーマットされます)
Bean 型には、引数を持たないパブリックコンストラクタが必要です。
オブジェクトの場合は null、プリミティブの場合はデフォルト値
xml ファイルで定義されている任意のチャネルで有効にできます。この設定は、データをサーバーからクライアントに送り戻す場合にのみ重要です。詳細については、チャネルでの古い AMF 直列化の実現を参照してください。デフォルト値を取得するのはプリミティブの Java 型のみです。Throwable オブジェクトは他の型指定されたオブジェクトと同様に扱われます。これらは、getter および setter を探す規則に従って処理され、型指定されたオブジェクトがクライアントに返されます。このため、Java 例外からすべての情報を取得できます。詳細については、チャネルでの古い AMF 直列化の実現を参照してください。Array API の実装を受け取るメソッドにパラメータとして渡すことができます。HashSet インスタンスに変換された後でパラメータとして渡されます。Set インターフェイスの適切な実装の 1 つであるためです。SortedSet インターフェイスによって型指定されたパラメータに渡されます。
Collection を拡張する任意のインターフェイスによって型指定されたパラメータに渡された後、mx
詳細については、チャネルでの古い AMF 直列化の実現を参照してください。
イベントフローについて
他のコンテナやコントロールによって送出されたイベントを受け取るコンテナまたはコントロールを指定することができます。Adobe Flash Player によって Event オブジェクトが送出されると、その Event オブジェクトは表示リストのルートからターゲットノードまでの間を往復し、各ノードをチェックして登録されたリスナーがあるかどうかを調べます。ターゲットノードは、表示リスト内の、イベントが発生したノードです。概念上、イベントフローは 3 つの部分に分けられます。次のセクションでは、これらの部分について説明します。イベントフローの詳細については、イベントの伝播を参照してください。
キャプチャ段階について
ターゲット段階について
バブリング段階について
キャプチャ段階について
イベントフローの最初の部分を "キャプチャ段階" と言います。ここでは、ルートノードからターゲットノードの親までのノードがすべて対象となります。この段階では、Flash Player によって各ノードがルートから順に確認され、イベントを処理するリスナーが登録されているかどうかがチェックされます。リスナーが登録されている場合は、Event オブジェクトの値が適切に設定され、そのリスナーが呼び出されます。このフローはターゲットノードの親に達するまで続き、親に登録されているリスナーが呼び出されると終わります。キャプチャ段階の詳細については、キャプチャ段階を参照してください。
ターゲット段階について
イベントフローの 2 番目の部分を "ターゲット段階" と言います。ここでは、ターゲットノードのみが対象となります。Flash Player は Event オブジェクトに適切な値を設定し、ターゲットノードにイベントリスナーが登録されているかどうかを調べて、それらのリスナーを呼び出します。ターゲット段階の詳細については、ターゲット段階を参照してください。
バブリング段階について
イベントフローの 3 番目の部分を "バブリング段階" と言います。ここでは、ターゲットノードの親からルートノードまでのすべてのノードが対象となります。最後にルートノードのリスナーが呼び出されて、このフローは終わります。バブリング段階の詳細については、バブリング段階を参照してください。
Flex 2 開発ガイド > ユーザーインターフェイスのカスタマイズ > フォントの使用 > 複数の書体の使用
複数の書体の使用
ほとんどのフォントには、4 つの書体スタイルがあります。それは、標準、ボールド、イタリック、およびボールドイタリックです。Flex アプリケーションには、任意の数の書体スタイルを埋め込むことができます。アプリケーションにボールド書体のみを埋め込むと、通常の書体 (標準書体) は使用できません。使用するには、標準書体も埋め込む必要があります。使用する書体ごとに、新規の @font-face 宣言をスタイルシートに追加する必要があります。Button コントロールのように、デフォルトで標準書体ではなく、ボールド書体を使用する Flex コントロールもあります。Button ラベルにフォントを埋め込む場合は、そのフォントのボールド書体を埋め込む必要があります。書体を定義した後、fontFamily と同じエイリアスを使用してフォントのセレクタを定義します。ボールド、イタリック、標準の書体ごとに 1 つのセレクタを定義します。この例では、フォントスタイルを適用するために、クラスセレクタを Label コントロールにインラインで適用します。オプションとして、ボールド書体やイタリック書体をインラインでコントロールに適用することもできます。次に例を示します。次の例では、システムフォント名を使用して標準書体とイタリック書体を埋め込みます。ボールドイタリックのフォントを使用する場合は、そのフォントにボールドイタリック用の別の書体がある必要があります。他のクラスセレクタやタイプセレクタと同様に、埋め込みフォント用の fontSize などの任意の記述子をセレクタに追加することもできます。デフォルトでは、Flex にはアプリケーション内の各埋め込みフォントについてフォント定義全体が含まれるため、アプリケーションのサイズを小さくするには、使用するフォント数を制限する必要があります。フォントの文字範囲を定義することで、フォント定義のサイズを限定できます。詳細については、文字範囲の設定を参照してください。
Flex 2 開発ガイド > ユーザーインターフェイスのカスタマイズ > フォントの使用 > フォントマネージャについて
フォントマネージャについて