基本的なイベント処理
特定のイベントに応答して実行される特定のアクションを指定する方法は、「イベント処理」と呼ばれます。イベントソース:イベントがどのオブジェクトに対して発生するか例えば、どのボタンをクリックするか、どの Loader オブジェクトがイメージをロードしているかなどです。イベントソースは、「イベントターゲット」と呼ばれることもあります。イベント:何が発生するか、何に対して応答するか多くのオブジェクトが複数のイベントをトリガするため、これを特定することが重要です。
応答:イベントが発生したときにどの手順を実行するか
イベントを処理する ActionScript コードを記述すると、常にこの 3 つの要素が含まれ、コードはこの基本構造に従います(太字の要素は特定の場合に入力するプレースホルダーです)
このコードは 2 つの処理を実行します。まず、関数を定義します。この関数は、イベントに応答して実行するアクションを指定します。基本的に、イベントが発生したときに関数のアクションが実行されるように、関数を指定されたイベントに「サブスクライブ」します。これらの各部分について詳しく説明します。「関数」は、アクションを実行するショートカット名のような 1 つの名前を使用して、アクションをグループ化する方法です。
関数はメソッドと同じですが、必ずしも特定のクラスに関連付けられていない点が異なります(実際には、メソッドは特定のクラスに関連付けられた関数として定義できます)
関数パラメータの指定は、変数の宣言と似ているため、パラメータのデータ型も指定する必要があります。イベントごとに定義された ActionScript クラスがあり、ユーザーが関数パラメータに指定したデータ型は、応答する特定のイベントに関連付けられたクラスになります。
最後に、左中括弧と右中括弧({
})の間に、イベントが発生したときにコンピュータで実行させる命令を記述します。イベント処理関数を記述したら、イベントが発生したときにその関数を呼び出すようにイベントソースオブジェクト(ボタンなど、イベントが発生するオブジェクト)に通知する必要があります。まず、応答する特定のイベントの名前を表すパラメータがあります。各イベントは再び特定のクラスに関連付けられ、そのクラスには、イベントごとに事前に定義された特定の値が指定されます。つまり最初のパラメータに使用するイベントの独自の一意名のようなものです。次に、イベント応答関数の名前を表すパラメータがあります。関数名をパラメータとして渡す場合、関数名には括弧は付けません。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
関数のパラメータ
値または参照によってパラメータを渡すという概念は、ほとんどのプログラマにとってなじみがありますが、arguments オブジェクトおよび
(rest) パラメータは初めて見るという人も多いかもしれません。
値渡しまたは参照渡しによるパラメータの受け渡し
デフォルトのパラメータ値
値渡しまたは参照渡しによるパラメータの受け渡し
多くのプログラミング言語では、値渡しと参照渡しによるパラメータの受け渡しの違いを理解しておくことが重要です。この違いは、コードの設計方法に影響します。値渡しとは、関数内で使用するためにパラメータの値がローカル変数にコピーされることです。参照渡しとは、実際の値ではなく、パラメータへの参照のみが渡されることです。実際の値がコピーされるのではなく、パラメータとして渡される、変数への参照が作成され、関数内で使用するためにローカル変数に割り当てられます。関数の外部にある変数への参照として、ローカル変数では元の変数の値を変更できます。0 では、値はすべてオブジェクトとして格納されているため、すべてのパラメータは参照渡しです。パラメータはプリミティブなので、値渡しのように動作します。これは、関数内の xValue および yValue は関数の外部にある同じ名前の変数とは別に存在するメモリ内の新しい位置を参照するためです。プリミティブデータ型に属していない他のすべてのオブジェクトは常に参照渡しによって渡されます。これにより、元の変数の値を変更できます。オブジェクトはプリミティブ型ではないため、参照渡しで渡されるだけではなく、参照のままでもあります。つまり、関数内のパラメータを変更すると、関数の外側にあるオブジェクトのプロパティも影響を受けます。
デフォルトのパラメータ値
0 では、関数のデフォルトのパラメータ値を宣言する機能が新しく追加されました。デフォルトのパラメータ値を使用した関数の呼び出しでデフォルト値のパラメータが省略されると、そのパラメータの関数定義で指定された値が使用されます。デフォルト値のパラメータはすべてパラメータリストの末尾に配置する必要があります。デフォルト値として割り当てられた値はコンパイル時定数である必要があります。パラメータのデフォルト値が存在すると、そのパラメータは「オプションパラメータ」になります。デフォルト値のないパラメータは、必須パラメータと見なされます。例えば、次のコードは、3 つのパラメータで関数を作成します。このうち、2 つのパラメータにはデフォルト値があります。パラメータ 1 つだけで関数を呼び出す場合、そのパラメータのデフォルト値が使用されます。パラメータが関数に渡されると、arguments オブジェクトを使用して関数に渡されたパラメータについての情報にアクセスできます。arguments オブジェクトは、関数に渡されるすべてのパラメータを含む配列です。length プロパティは、関数に渡されるパラメータの数を報告します。callee プロパティを使用すると、関数自体を参照することができます。これは関数式の再帰呼び出しに便利です。0 では、関数呼び出しで関数定義内で定義されているパラメータより多いパラメータを指定できますが、パラメータ数が必須パラメータ数(および任意でオプションパラメータ数)と一致しない場合は strict モードでコンパイラエラーが生成されます。arguments オブジェクトの配列を使用すると、関数に渡されるパラメータが関数定義内で定義されたかどうかに関わらず、このパラメータにアクセスできます。callee プロパティは、再帰を作成する場合に匿名関数でよく使用されます。このプロパティを使用すると、コードに柔軟性を持たせることができます。
開発過程で再帰関数の名前が変更された場合でも、関数名ではなく arguments
callee を使用していれば、関数本体内の再帰呼び出しの変更について考慮する必要はありません。callee プロパティを使用して再帰を有効にします。代わりに、宣言したパラメータ名を使用してパラメータにアクセスする必要があります。ストリング "arguments" をパラメータ名として使用しないようにする必要があります。次のコードは出力を作成しません。これは、現在の関数を呼び出した関数への参照です。しかし、呼び出し元の関数への参照が必要な場合は、それ自体への参照である追加のパラメータを渡すように呼び出し元の関数を変更することができます。(rest)パラメータと呼ばれる新しいパラメータ宣言が導入されました。このパラメータを使用すると、任意の数のカンマ区切りのパラメータを受け入れる配列パラメータを指定できます。パラメータには、予約語ではない名前を指定することができます。このパラメータ宣言は、指定される最後のパラメータである必要があります。このパラメータを使用すると、arguments オブジェクトは使用できなくなります。(rest)パラメータは、パラメータリストの最後のパラメータであれば、他のパラメータと使用することもできます。(rest)パラメータを使用するようにします。
最初のパラメータは
(rest)パラメータにより作成された配列の一部ではなくなるため、最初の値は出力されません。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
ストリングの作成
0 のプログラミング / ストリングの操作
ストリングの作成
0 では、String クラスを使用してストリング(テキスト)データを表現します。ストリングを作成する最も簡単な方法は、ストリングリテラルを使用する方法です。ストリングリテラルを宣言するには、垂直の二重引用符(")または一重引用符(')で囲みます。例えば、次の 2 つのストリングは同等です。また、次のように new 演算子を使用してストリングを宣言することもできます。次の 2 つのストリングは同等です。区切り文字が一重引用符(')で記述されているストリングリテラル内で一重引用符(')を使用するには、エスケープ文字として円記号(\)を付けます。同様に、区切り文字が二重引用符(")で記述されているストリングリテラル内で二重引用符(")を使用するには、エスケープ文字として円記号(\)を付けます。次の 2 つのストリングは同等です。一重引用符または二重引用符の使用は、次に示すように、ストリングリテラルに存在するのが一重引用符であるか二重引用符であるかに基づいて選択することもできます。この点は二重引用符についても同様です。ストリングリテラルを囲む場合は垂直の引用符を使用する必要があります。別の場所からコピーしたテキストを ActionScript にペーストする際は、正しい文字になっているか確認してください。次の表に示すとおり、エスケープ文字の円記号(\)を使用することで、その他の文字をストリングリテラル内に記述することもできます。
単一の円記号
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
0 のプログラミング / 正規表現の使用 / 正規表現のシンタックス
次のように括弧を使用すると、正規表現の中でグループを定義できます。グループはパターンの部分的なセクションであり、次の目的で使用できます。
繰り返し制御を複数の文字に適用する場合
選択制御(| 文字)を適用する対象のサブパターンを区切る場合
一致したサブストリングをキャプチャする場合
例えば、正規表現の中で \1 を使用すると、前出のグループが一致したストリングと同じ内容に一致します。以降のセクションでは、グループの使用方法について詳しく説明します。
繰り返し制御でのグループの使用
選択制御文字(|)とグループの使用
グループによる一致したサブストリングのキャプチャ
非キャプチャグループと先読みグループの使用
名前付きグループの使用
繰り返し制御でのグループの使用
グループを使用しない場合、繰り返し制御文字は、その直前にある 1 つの文字または文字クラスに適用されます。次に例を示します。グループを使用すると、次のように、繰り返し制御文字を複数の文字や文字クラスに適用できます。繰り返し制御文字の詳細については、繰り返し制御文字を参照してください。
選択制御文字(|)とグループの使用
グループは、次のように選択制御文字(|)の適用対象となる範囲を指定するために使用できます。
グループによる一致したサブストリングのキャプチャ
正規表現では、パターン内に通常のグループ化括弧を指定すると、後でそのグループに一致した内容を参照できます。これは後方参照と呼ばれており、後方参照に使用するグループをキャプチャグループといいます。例えば、次の正規表現に含まれている \1 というシーケンスは、その前の括弧で指定したキャプチャグループに一致したサブストリングと同じ内容に一致します。、\99 のように記述することにより、1 つの正規表現の中で最大 99 個まで使用できます。
非キャプチャグループと先読みグループの使用
非キャプチャグループとは、キャプチャおよび番号による後方参照の機能を持たない、グループ化だけを目的としたグループです。
非キャプチャグループを定義するには、次のように (次の例は、(com|org) というパターンをキャプチャグループおよび非キャプチャグループで使用した場合の違いを示しています(全体の一致を調べた後でキャプチャグループの一致内容を列挙するために exec() メソッドを使用します)
特殊な非キャプチャグループとして、先読みグループと呼ばれるものがあります。さらにこれは、肯定先読みグループと否定先読みグループの 2 つに分類されます。
肯定先読みグループは (= と ) で定義され、該当位置に一致する必要があるサブパターンを示しますが、肯定先読みグループに一致した部分は、同じ正規表現の中にある後続のパターンについても一致の対象となります。例えば、次のコードに含まれている (=e) は肯定先読みグループなので、これに一致する文字 e は、正規表現の続き(この例ではキャプチャグループの \w*))についても一致を調べる対象となります。否定先読みグループは (と ) で定義され、該当位置に一致してはならないサブパターンを示します。例えば、次のようになります。
名前付きグループの使用
名前付きグループとは、正規表現で使用するグループの一種で、名前による識別子を指定したものを指します。
名前付きグループを定義するには、(例えば、次の正規表現では、digits という識別子を持つ名前付きグループを指定しています。exec() メソッドで名前付きグループを使用すると、次のように、名前付きグループに一致したストリングが result 配列にプロパティとして追加されます。次の例では、name および dom という識別子を持つ 2 つの名前付きグループを使用しています。0 独自の拡張機能です。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
フィルタ操作の潜在的な問題
0 のプログラミング / 表示オブジェクトのフィルタ処理 / フィルタの作成と適用
フィルタ操作の潜在的な問題
フィルタを操作する際には、混乱やトラブルの原因になる可能性があるため注意を必要とする事項がいくつかあります。これらについては、次の節で説明します。
フィルタとビットマップキャッシュ
実行時のフィルタの変更
フィルタとオブジェクト変形
フィルタとビットマップオブジェクト
フィルタとビットマップキャッシュ
表示オブジェクトにフィルタを適用するには、そのオブジェクトのビットマップキャッシュを有効にする必要があります。後でその表示オブジェクトからすべてのフィルタを削除すると、cacheAsBitmap プロパティは、現在の設定値の直前の設定値にリセットされます。
実行時のフィルタの変更
表示オブジェクトに既に 1 つ以上のフィルタが適用されている場合、その他のフィルタを filters プロパティ内の配列に追加したり、配列からフィルタを削除したりしてフィルタのセットを変更することはできません。適用されているフィルタのセットを追加または変更するには、このような方法を使用するのではなく、まず別の配列に変更を加えます。その後で、オブジェクトに適用するフィルタの表示オブジェクトの filters プロパティに、変更を加えた配列を適用する必要があります。この操作を行う最も簡単な方法は、filters プロパティの配列を Array 変数に読み込み、この一時的な配列に変更を加える方法です。次に、この配列を表示オブジェクトの filters プロパティに再割り当てします。さらに複雑なケースでは、フィルタのマスター配列を別途保持しておく必要があります。このマスターフィルタ配列に変更を加え、変更ごとにマスター配列を表示オブジェクトの filters プロパティに再割り当てします。
その他のフィルタの追加
次のコードは、既に 1 つ以上のフィルタが適用された表示オブジェクトに、その他のフィルタを追加する手順を示したものです。フィルタのセットから 1 種類のフィルタを削除する。表示オブジェクトに複数のフィルタが適用されている場合で、その中から 1 種類のフィルタだけを削除して、その他のフィルタはオブジェクトに適用されたままにする場合は、そのフィルタのセットを一時的な配列にコピーし、その配列から不要なフィルタを削除します。次に、この一時的な配列を表示オブジェクトの filters プロパティに再割り当てします。配列から 1 つまたは複数のエレメントを削除する様々な方法については、配列要素の削除で説明されています。最も一般的な状況としては、オブジェクトの最上位フィルタ(オブジェクトに最後に適用されたフィルタ)を削除する場合が考えられます。最下位のフィルタ(オブジェクトに最初に適用されたフィルタ)を削除する場合も同じコードを使用しますが、pop() メソッドの代わりに Array クラスの shift() メソッドを使用します。フィルタの配列の中間からフィルタを削除するには(配列に 3 つ以上のフィルタが存在する場合)、splice() メソッドを使用できます。この場合、削除するフィルタのインデックス(配列内での位置)がわかっていなければなりません。例えば、次のコードは表示オブジェクトの 2 番目のフィルタ(インデックス 1 のフィルタ)を削除します。
フィルタのインデックスの特定
配列から削除するフィルタを指定するには、そのフィルタのインデックスがわかっていなければなりません。削除するフィルタのインデックスは、アプリケーションの設計段階で知っておくか、計算によって割り出す必要があります。最も推奨される方法は、削除するフィルタが、フィルタのセット内で常に同じ位置になるようにアプリケーションを設計することです。例えば、畳み込みフィルタとドロップシャドウフィルタが(この順番で)適用された単一の表示オブジェクトがあり、ドロップシャドウフィルタを削除して畳み込みフィルタをそのまま残す場合は、削除するフィルタの位置(最上位フィルタ)が既にわかっています。
つまり、Array クラスのどのメソッドを使用すればよいかが、すぐにわかります(この場合は、Array
pop() メソッドでドロップシャドウフィルタを削除します)
削除するフィルタが常に特定の型を持ち、フィルタのセット内での位置は必ずしも同じでない場合は、配列内の各フィルタのデータ型をチェックし、削除するフィルタを特定することができます。例えば、次のコードでは、フィルタのセットからグローフィルタを特定し、そのフィルタをセットから削除します。削除するフィルタを実行時に選択する場合など、さらに複雑なケースでは、フィルタ配列の永続的なコピーを別個に保持しておき、フィルタのマスターリストとして使用する方法が適しています。フィルタのセットに変更を加える(フィルタの追加または削除)場合は、常にマスターリストを変更し、このフィルタ配列を表示オブジェクトの filters プロパティとして適用します。例えば、次のコードリストでは複数の畳み込みフィルタを表示オブジェクトに適用して、様々な視覚効果を作成しています。その後、アプリケーションではフィルタの 1 つが削除され、他のフィルタはそのまま維持されています。この場合、フィルタ配列のマスターコピーと、削除するフィルタへの参照は保持されています。特定のフィルタを検索して削除する処理は前述の方法と同様ですが、ここではフィルタ配列の一時的なコピーを作成せずに、マスターコピーを操作して表示オブジェクトに適用しています。この方法では、フィルタ配列のアイテムに対する保存済みのフィルタ参照を比較して、削除するフィルタを特定する場合は、フィルタ配列のコピーを別個に保持しておく必要があります。表示オブジェクトの filters プロパティからコピーした一時的な配列のエレメントに対する保存済みのフィルタ参照を比較しても、コードは動作しません。表示オブジェクトには元のオブジェクトではなくこれらのコピーが適用されるので、filters プロパティを一時的な配列に読み込むと、一時的な配列には元のフィルタオブジェクトではなく、コピーされたフィルタオブジェクトへの参照が格納されてしまいます。したがって、前述の例で、一時的なフィルタ配列のフィルタと比較して filterToRemove のインデックスを特定しようとしても、一致する項目が見つかりません。
フィルタとオブジェクト変形
ドロップシャドウなどのフィルタ処理された領域のうち、表示オブジェクトの境界ボックスの矩形よりも外側にある部分は、ヒット検出の対象サーフェスの一部と見なされません。ヒット検出は、インスタンス同士の重なりや交差があるかどうかを判定する処理です。DisplayObject クラスのヒット検出メソッドはベクターベースであるため、ビットマップとして生成された結果に対してヒット検出を実行することはできません。例えば、ベベルフィルタをボタンインスタンスに適用した場合、そのインスタンスのベベル部分ではヒット検出を使用できません。フィルタでは拡大/縮小、回転および傾斜がサポートされません。フィルタ処理した表示オブジェクト自体を拡大/縮小しても(scaleX と scaleY を 100% 以外にしても)、フィルタ効果がインスタンスと共に拡大/縮小されることはありません。つまり、インスタンスの元のシェイプを回転、拡大/縮小または傾斜しても、そのインスタンスと共にフィルタも回転、拡大/縮小または傾斜するわけではありません。フィルタを適用してインスタンスをアニメーション化すると、リアルな効果を生成できます。インスタンスをネスト化し、BitmapData クラスを使用してフィルタをアニメーション化しても、同じ効果を実現できます。
フィルタとビットマップオブジェクト
このようにして、実際には元のオブジェクトではなくオブジェクトのコピーにフィルタが適用されます。このコピーは、その後、メイン表示で元のオブジェクトに重ねて配置され、最も近いピクセルに可能な限り近付けられます。元のビットマップの境界が変化すると、フィルタが適用されたコピーのビットマップは、伸縮または歪曲されるのではなく、新しく再作成されます。ビットマップオブジェクトのフィルタをすべてクリアすると、cacheAsBitmap プロパティは、フィルタ適用前の値にリセットされます。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
0 のプログラミング / 表示オブジェクトのフィルタ処理 / 使用可能な表示フィルタ
その結果、表示オブジェクトは、底部から光で照らされて穏やかに輝いているように見えるようになります。ドロップシャドウフィルタと同様に、グローフィルタも光源の距離、角度およびカラーを変更できるプロパティを備えており、様々な効果を生成できます。また、GlowFilter には、内側グロー、外側グロー、ノックアウトモードなどのグローのスタイルを変更するためのオプションもいくつか用意されています。次のコードでは、Sprite クラスを使用して十字形を作成し、その十字形にグローフィルタを適用します。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
オートメーション API について
Flex には、オートメーションフレームワークを有効にする 4 つの主な部分があります。
エージェントクラス(アダプタとも呼ばれます)
次の図は、これらの部分の関係を示したものです。Application インスタンスやすべてのポップアップウィンドウ、ツールヒントのインスタンス、カーソルなど、アプリケーション内で表示可能なすべてのオブジェクトの親となります。ADDED イベントのイベントリスナーを追加します。それぞれの表示オブジェクトに、委譲の新しいインスタンスを作成します。委譲クラスのマップに表示オブジェクトを追加します。これで、例えば次のように、委譲インスタンスに表示オブジェクトがマッピングされます。新しい表示オブジェクトのすべての子もクラスマップに追加されるようにします。エージェントはこのイベントをリッスンします。これはそのコンポーネントクラスに対する委譲クラスのマップを維持する静的クラスです。このクラスは、記録イベントで次のことを行います。
委譲クラスについて
委譲クラスは、Flex フレームワークおよびチャートコンポーネントにオートメーションフックを提供します。委譲クラスは、コンポーネントクラスおよび独自のクラスを入力として使用して、関連付けられた Automation クラスに自身を登録します。委譲クラスの init() メソッドは、次のことを実行します。このメソッドは、クラスをオートメーションコンポーネントクラスにマッピングします。例えば、次のようにします。マウスイベントおよびキーボードイベントのイベントリスナーを追加します。例えば、次のようにします。すべてのコアフレームワークおよびチャートクラスには、すでに委譲クラスが作成されています。イベントを送出するカスタムコンポーネントがあり、それを自動化したい場合以外、委譲クラスを作成する必要はありません。この場合は、カスタムの委譲クラスを作成して、Flex アプリケーションに含める必要があります。
エージェントについて
エージェントは、Flex アプリケーションと QTP や Segue などのオートメーションツールの間の通信を容易にします。記録時には、通常エージェントクラスがオートメーションプロセスの永続性メカニズムを実装する役割を持ちます。このクラスは、イベント、ユーザーのセッション、アプリケーションのプロパティなどの情報を取得し、通常はそれらをデータベース、ログファイル、LocalConnection、または他の永続ストレージに書き出します。エージェントを作成するときは、エージェントとそれがサポートするクラスを SWC ファイルにコンパイルします。エージェントの init() メソッドは、次のことを実行します。環境を定義します。この環境は、どのコンポーネントとメソッド、プロパティ、イベントがオートメーション API で記録可能かを示します。サンプルのカスタムエージェントクラスは、Flex コンポーネントの API 情報を含む XML ファイルを使用します。エージェントはそれを、次の例のように、URLRequest() コンストラクタの呼び出しでロードします。この例では、ソースは Flex のメタデータ(または環境情報)を定義する XML ファイルです。このメタデータには、Flex コンポーネントのイベントおよびプロパティが含まれています。イベントを XML として表すことはエージェント特有です。汎用オートメーション API の場合これは不要ですが、XML ファイルを使用すると、記録されるイベントの精度が調整しやすくなります。アダプタのインスタンスを init() メソッドで作成する必要はありません。このインスタンスは、エージェントがアプリケーションのインスタンス化の前に初期化を必要とする場合、APPLICATION_COMPLETE イベントハンドラでも作成できます。大部分のエージェントは、オートメーション情報を維持し環境を定義する方法を処理する一連のクラスを必要とします。詳細については、記録エージェントの作成を参照してください。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
記録エージェントの作成
zip ファイルに含まれるクラスを使用して、ユーザーがアプリケーションを操作するたびにメトリックデータを記録するカスタムエージェントを作成することができます。ユーザーの操作を記録して再生するエージェントを作成する方法については、再生エージェントの作成を参照してください。これらのクラスに加え、ZIP ファイルには環境 XML ファイルおよびこのファイルを解析するユーティリティクラスも含まれています。また、ユーザーのセッション情報を提供するカスタムエージェントから RemoteObject にアクセスすることもできます。例を単純化するため、ここではデータをデータベースに書き込むのではなくトレースログに書き出します。CustomAdapter クラスとそれがサポートするファイルを使用して、オートメーションイベントを記録する Flex アプリケーションを作成するには、このセクションの手順説明に従います。このカスタムエージェントは、異なる環境情報を使用するエージェント(Flex のオートメーション機能に含まれる QTP エージェントなど)と一緒には使用できません。そのため、この例のエージェントを使用する場合は、QTP を使用してスクリプトを記録することは避けてください。オートメーション API を使用して自動化可能なイベントを記録するアプリケーションを作成するには、まず次のことを実行する必要があります。* パッケージの中にエージェントおよびヘルパーのクラスが含まれています。また、Flex アプリケーションをデータベースに接続する際に使用できる MySQL および PHP コードも含まれています。xml ファイルを、Flex アプリケーションを配置するディレクトリの最上位に保存します。これはエージェントの環境で定義される名前です。例えば、ユーザーがボタンをクリックした場合、このプロパティには Button コントロールへの参照が格納されます。
TextInput コントロールに入力されたテキストや、マウスクリックの際に Alt キーが押されたかどうかなど
すべての引数は、次のようなコードを使用して表示できます。データベースを設定せずに例を実行できるよう、メソッドを単純化するには、このセクションの手順に従います。as ファイルを開きます。サービスのアクセスをコメントアウトし、次のように trace ステートメントに置き換えます。後でサービスメソッドのコメントを解除すれば、データベースサポートを追加できます。コンストラクタを編集します。こうすると、アプリケーションの起動時にカスタムエージェントを確実にインスタンス化できます。カスタムエージェントの SWC ファイルをコンパイルします。これを行うには、次の例のように compc ユーティリティを使用してカスタムパッケージにクラスを含めます。swc ファイルが作成されます。
Flex アプリケーションの作成と実行
Flex でオートメーションを使用するには、Flex アプリケーションとそれがサポートするラッパーファイルを作成する必要があります。Flex アプリケーションをコンパイルします。swc ファイルをライブラリとして含める必要があります。コマンドラインコンパイラを使用する場合は、これも手動で作成する必要があります。SWF ファイルはラッパーで要求します。SWF ファイルを直接実行しようとすると、ファイルのセキュリティエラーによって環境 XML ファイルのロードが妨げられます。js ファイルをロードします。例えば、次のようにします。これで、Web サーバーのディレクトリには以下のものが配置されます。XML ファイルは実行時にロードされるため、Web サーバー上の SWF ファイルからアクセス可能になっている必要があります。アプリケーションを実行し、ラベルの名前を「42」に変更します。トレースログには次のようなものが含まれる必要があります。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
これにより、アプリケーションの迅速なコンパイル、テスト、展開が可能になります。MXML ファイルを SWF ファイルにコンパイルし、コンパイルしたファイルとそのラッパーファイルを Web サーバーに展開する代わりに、ブラウザで MXML ファイルを更新するだけで済みます。J2EE アプリケーションサーバー用の Flex コンパイラモジュールは、サーブレットをサポートするほとんどの J2EE アプリケーションサーバーに展開できる ZIP ファイルで、Flex アプリケーションを JSP で記述する際に使用できる JSP タグライブラリも提供します。このコンパイラモジュールは Adobe Web サイトからダウンロードできます。
Web 層コンパイラの仕組み
この処理は、次の手順で行われます。
クライアントが、*
mxml ファイル拡張子を持つファイルを要求します。Web サーバーはこの要求をコンパイラモジュールに転送します。コンパイラモジュールは、MXML ファイルを SWF ファイルにコンパイルします。コンパイラモジュールはインクリメンタルコンパイルを使用するため、多くの場合、コンパイルにかかる時間は、初回のコンパイルより短くなります。コンパイラモジュールは、HTML ファイルを Web サーバーに返し、Web サーバーはこれをクライアントに返します。SWF ファイルのコンパイルが正常に完了したら、HTML ページに SWF ファイルが埋め込まれます。HTML ファイルがエラーページである場合、SWF ファイルはその HTML ページには埋め込まれず、その後の要求も作成されません。swf を持つファイルに対する要求を受信したとき、コンパイラモジュールは SWF ファイルのみを返し、このファイルのラッパーを返しません。通常は、SWF ファイルを直接要求しないでください。ラッパーに埋め込まれた場合とは、違う動作をするおそれがあるからです。Web 層コンパイラを使用すると、コマンドラインコンパイラを使用する場合に比べ、次のようなメリットがあります。
インクリメンタルコンパイルが可能である(変更されたビットだけを再コンパイルするため、アプリケーション全体の再コンパイルが不要)
SWF ファイルとラッパーファイルをコンパイル後に展開する必要がない。HTML ラッパー(テンプレート)をカスタマイズできる。
クエリ文字列パラメータの追加によるデバックが可能である(Web サーバーへのリンクを送信することにより、ワーキンググループ内でアプリケーションに対する更新を共有できる。ブラウザにエラーメッセージと警告を表示する。Web 層コンパイラを使用すると、コマンドラインコンパイラを使用する場合に比べ、次のようなデメリットがあります。運用環境で使用できない。高速インストール、ディープリンク、バージョン検出サポートが組み込まれていない。キャッシュを Web サーバーに依存する。Linux システムで、一部のアプリケーションをコンパイルするとき、グラフィックディスプレイがないというエラーメッセージが返される。これは、Java コンパイラを実行している Apache ユーザーがデスクトップへのアクセス許可を持たないために発生します。xml に次の行を追加します。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
Flex プロパティおよびメソッドを使用して、座標系を変換できます。
座標系について
次の表に座標系の説明を示します。グローバル座標系は、コンポーネントのコンテキストから独立した、座標の全体集合を提供します。この座標系を使用する場面としては、オブジェクト間の距離を測定するときや、サブコントロールに対する相対座標から親コントロールに対する相対座標に座標を変換する際の中間点として、などが挙げられます。この座標系は、コンポーネントの左上隅を原点とします。ローカル座標系は、マウスポインタの位置を表すために使用されます。どのコンポーネントにも、ローカル座標系を使用する mouseX プロパティと mouseY プロパティが存在します。この座標系は、コンポーネントの内容の左上隅を原点とします。ローカル座標やグローバル座標とは異なり、コンテンツ座標にはコンポーネントのコンテンツ領域がすべて含まれます。これには、現在クリッピングされていて、コンポーネントをスクロールしなければアクセスできない領域も含まれます。したがって、Canvas コンテナを下方向に 100 ピクセルスクロールした場合、表示内容の左上隅をコンテンツ座標で表すと(0, 100)になります。コンテンツ座標系は、絶対配置を使用するコンテナの子の位置を取得または設定するときに使用します。絶対配置について詳しくは、コンポーネントの配置についてを参照してください。次の図は、各座標系が互いにどのような関係にあるかを示します。
座標プロパティおよびメソッドの使用
場合によっては、位置の座標系を変換することが必要になることがあります。例えば、次のような場合に座標の変換が必要になります。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 プロパティを使用して、ローカル座標とコンテンツ座標間の変換方法(例えば、最初の変換からグローバル座標を使用するまでの間、どのようにして正しい基準座標系を維持しているか)を示しています。前の例で実行する SWF ファイルは以下のとおりです。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
コンポーネントインスタンスの実行時の作成と管理
アプリケーションのユーザーインターフェイスをレイアウトする場合は MXML を、アプリケーションのイベント処理や実行時の制御を行う場合は ActionScript を使用するのが一般的です。また、ActionScript を使用して、コンポーネントのインスタンスを実行時に作成することも可能です。
表示リストとコンテナの子について
Flash Player は、アプリケーションを構成する可視オブジェクト(または可視になる可能性のあるオブジェクト)のツリーを維持します。ツリーのルートは Application オブジェクトで、子コンテナとコンポーネントがツリーのブランチとリーフノードになります。このツリーのことを「表示リスト」と呼びます。子コンポーネントをコンテナに追加するとき、またはコンテナから削除するときは、表示リストに対して追加または削除操作を行うことになります。また、表示リスト内での子コンポーネントの位置を変更することで、子コンポーネントの相対的な位置を変更することもできます。表示リストはアプリケーションの最上位をルートとするツリーですが、ActionScript でコンテナのメソッドとプロパティを使用してコンテナの子を操作するときは、コンテナの直接の子にアクセスするだけであり、それらをリスト内のインデックス付きアイテムとして扱います。このインデックスは 0 から始まり、表示リスト内のコンテナの最初の子が 0 になります。例えば、次の例のように、コンテナのすべての子コンポーネントを反復処理できます。このリストには、コンテナのすべての子に加えて、コンテナの境界線や背景イメージなどの「クロム」(表示エレメント)を実装する DisplayObject も含まれています。詳しくは、表示専用の子へのアクセスを参照してください。
コンテナまたはアプリケーション内の子コンポーネントの数の取得
コンテナに含まれる直接の子コンポーネントの数を取得するには、コンテナの numChildren プロパティの値を取得します。次のアプリケーションは、アプリケーションと VBox コンテナに含まれる子の数を取得します。VBox コントロールには 5 つのラベルコントロールが含まれているため、子の数は 5 になります。前の例で実行する SWF ファイルは以下のとおりです。ルートアプリケーションへのアクセスについて詳しくは、スコープについてを参照してください。
表示専用の子へのアクセス
コンテナには、境界線や背景などのスタイルエレメントやスキンが含まれていることがあります。コンテナの rawChildren プロパティを使用すると、コンポーネントの「内容を表す子」とスキンおよびスタイルの「表示されるだけの子」を含む、コンテナのすべての子にアクセスできます。このインターフェイスのメソッドとプロパティ(getChildAt() など)を使用することで、コンテナのすべての子にアクセスし、操作できます。
コンポーネントの実行時の作成と削除
コンポーネントのインスタンスを実行時に作成するには、インスタンスを定義し、任意のプロパティを設定します。次に、親コンテナの addChild() メソッドを呼び出して、親コンテナの子としてそのインスタンスを追加します。このメソッドのシグネチャは次のとおりです。child パラメータは、コンテナに追加するコンポーネントを指定します。Flex コンポーネントはすべてこのインターフェイスを実装しています。前の例で実行する SWF ファイルは以下のとおりです。この例では、ユーザーアクションに対する応答としてではなく、アプリケーションのロード時にコントロールを作成しています。ただし、次の例のように、ユーザーが既存のボタンを押したときに新しいコントロールを追加することもできます。前の例で実行する SWF ファイルは以下のとおりです。次の図は、ユーザーが元(一番左)のボタンを 3 回押した後のアプリケーションの状態を示しています。removeChild() メソッドの呼び出し後に、削除した子がアプリケーションのどこからも参照されない場合、その子はガベージコレクションプロセスによって破棄されます。次の例は、ユーザーがボタンを押したときにそのボタンをアプリケーションから削除します。前の例で実行する SWF ファイルは以下のとおりです。次の図は、ユーザーが「Add CheckBox」ボタンを押した後のアプリケーションの状態を示しています。次の例では、Accordion コンテナにパネルを追加および削除しています。前の例で実行する SWF ファイルは以下のとおりです。
子の順序の制御
子の順序は、特定の順序で子を追加することによって制御できます。その他にも次のような方法があります。addChildAt() メソッドを使用して、コンポーネントの既存の子の中のどこに新しい子を追加するかを指定する。setChildIndex() メソッドを使用して、表示リスト内のあるコンポーネントの子の中での特定の子の位置を指定する。Flex コンポーネントはすべてこのインターフェイスを実装しています。次の例は、例:VBox コンテナの子の作成と削除の例を修正したものです。ボールド体のテキストは、前の例に追加された行、または前の例から変更された行を示します。前の例で実行する SWF ファイルは以下のとおりです。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
データバインディングについて
「データバインディング」は、あるオブジェクトのデータを別のオブジェクトに結び付けるプロセスです。データバインディングによって、アプリケーションの異なるレイヤー間でデータの受け渡しを簡単に行うことができます。データバインディングには、ソースプロパティ、宛先プロパティ、およびソースから宛先にデータをいつコピーするかを指定するトリガが必要です。ソースプロパティが変更されるときに、オブジェクトがトリガを送出します。前の例で実行する SWF ファイルは以下のとおりです。中括弧内のプロパティ名がバインディング式のソースプロパティです。
ソースプロパティの値を変更すると、Flex によって、ソースプロパティ myTI
次に例を示します。前の例で実行する SWF ファイルは以下のとおりです。toUpperCase() メソッドを使用して、Flex がソースプロパティ内のテキストを宛先プロパティにコピーするときに、そのテキストを大文字に変換しています。詳しくは、データバインディング式での ActionScript の使用とデータバインディング式での E4X 式の使用を参照してください。前の例で実行する SWF ファイルは以下のとおりです。中括弧シンタックスとは対照的に、<mx:Binding> タグではビュー(ユーザーインターフェイス)をモデルから完全に分離することができます。例については、複数のソースプロパティから 1 つの宛先プロパティへのバインディングを参照してください。中括弧シンタックスおよび <mx:Binding> タグはいずれもコンパイル時にデータバインディングを定義します。次の例のように、ActionScript コードを使用して実行時にデータバインディングを定義することもできます。前の例で実行する SWF ファイルは以下のとおりです。この処理が必要な理由は、Flex では、アプリケーションの起動時にソースオブジェクトが initialize イベントを送出し、すべてのデータバインディングがトリガされるからです。詳しくは、データバインディングの実行時期を参照してください。
データバインディングの実行時期
バインディングは、以下の場合に実行されます。バインディングソースが変更されたので、そのソースがイベントを送出します。このイベントは、アプリケーションの実行中にいつでも発生する可能性があります。イベントが Flex をトリガし、ソースプロパティの値が宛先プロパティにコピーされます。アプリケーションの起動時にソースオブジェクトが initialize イベントを送出します。すべてのデータバインディングは、宛先プロパティを初期化するために、アプリケーションの起動時に 1 回トリガされます。データバインディングを監視するには、データバインディングの発生時にイベントハンドラをトリガするバインディング Watcherを定義します。これらのメソッドにより、意図したとおりに行われないバインディングを実行できます。変更を加えてもバインディングが実行されない場合にユーザインタフェースを更新するには、executeChildBindings() メソッドへの呼び出しなどのコードを 1 行追加します。
データバインディングをサポートするプロパティ
オブジェクトのプロパティはすべて、データバインディング式の宛先として使用できます。ただし、プロパティをデータバインディング式のソースとして使用するには、データバインディングをサポートするようにソースオブジェクトを実装する必要があります。つまり、プロパティの値が変更されてバインディングがトリガされると、オブジェクトからイベントが送出されます。このトピックでは、データバインディング式のソースとして使用できるプロパティを「バインド可能」プロパティと呼びます。Adobe Flex リファレンスガイドでは、データバインディング式のソースとして使用できるプロパティについて、次の文章が説明の中に記載されています。「このプロパティはデータバインディングのソースとして使用できます。データバインディング式のソースとして使用できるプロパティの作成について詳しくは、データバインディングのソースとして使用するプロパティの作成を参照してください。
データバインディングのソースとしての読み取り専用プロパティの使用
getter メソッド(setter メソッドなし)によって定義した読み取り専用プロパティをデータバインディング式のソースとして使用することもできます。Flex は、アプリケーションの起動時にデータバインディングを 1 回実行します。
データバインディングのソースとしての静的プロパティの使用
静的定数をデータバインディング式のソースとして自動的に使用することもできます。Flex は、アプリケーションの起動時にデータバインディングを 1 回実行します。静的変数をデータバインディング式のソースとして使用することもできます。Flex は、アプリケーションの起動時にデータバインディングを 1 回実行します。
データバインディングのソースとして使用するプロパティの作成
データバインディング式のソースとして使用するプロパティを作成する場合、Flex はソースプロパティの変更時に自動的にソースプロパティの値を宛先プロパティにコピーします。イベント名を省略すると、Flex は propertyChange という名前のイベントを自動的に作成し、Flex は このイベントをプロパティの変更時に送出して、そのプロパティをデータバインディングソースとして使用するすべてのデータバインディングをトリガします。イベント名を指定する場合は、開発者がソースプロパティの変更時にイベントを送出する必要があります。前の例で実行する SWF ファイルは以下のとおりです。注意: [Bindable] メタデータタグを省略すると、Flex コンパイラは、データバインディングメカニズムによりプロパティの変更が検出できないことを示す警告を通知します。
データバインディングの用途
データバインディングの一般的な用途は以下のとおりです。ユーザインタフェースコントロールのプロパティを他のユーザインタフェースコントロールにバインドします。
ユーザインタフェースコントロールのプロパティを中間層データモデルにバインドし、そのデータモデルのフィールドをデータサービス要求にバインドします(3 層システム)
ユーザインタフェースコントロールのプロパティをデータサービス要求にバインドします。データサービスの結果をユーザインタフェースコントロールのプロパティにバインドします。データサービスの結果を中間層データモデルにバインドし、そのデータモデルのフィールドをユーザインタフェースコントロールにバインドします。データモデルについて詳しくは、データの格納を参照してください。複雑なプロパティの個別の部分をユーザインタフェースコントロールのプロパティにバインドします。例えば、List コントロールのアイテムをクリックすると他のいくつかのコントロールのデータが表示されるマスタ詳細シナリオが考えられます。バインディングは強力なメカニズムですが、あらゆる状況に適しているわけではありません。例えば、個別の設定を厳密なタイミングで更新する必要がある複雑なユーザインタフェースでは、プロパティを順番に割り当てるメソッドを用いたほうが好ましいと考えられます。また、バインディングはプロパティが変更されるたびに実行されるので、毎回ではなく特定の変更時にのみ変更を認識させる場合、最良のソリューションではありません。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
リストコントロールでのドラッグ&ドロップの使用
次のコントロールでは、ドラッグ&ドロップ操作がビルトインでサポートされています。これらのコントロールのビルトインサポートを使用すると、ドラッグが有効なコントロールからドロップが有効なコントロールへアイテムをドラッグすることにより、アイテムを移動できます。ただし、アイテムをコピーする場合は、ロジックを追加する必要があります。詳細については、データの移動とコピーを参照してください。次のドラッグ&ドロップの例では、List コントロールから別の List コントロールにアイテムを移動します。前の例で実行する SWF ファイルは以下のとおりです。背後で実行されるイベント処理をユーザーが気にすることはありません。Tree コントロールを除くすべてのリストクラスでは、dragMoveEnabled プロパティのデフォルト値が false なので、あるコントロールから別のコントロールにエレメントだけをコピーできます。コピーを行うには、ドラッグ&ドロップ操作中に Ctrl キーを押したままにします。ドラッグ&ドロップ操作の唯一の要件は、データプロバイダの構造が 2 つのコントロールの間で一致する必要があることだけです。この例では、srclist のデータプロバイダはストリングの配列であり、ターゲットの List コントロールのデータプロバイダは空の配列です。destlist のデータプロバイダが他のデータ型の配列の場合、ドラッグされたデータが destlist で正しく表示されないことがあります。ドラッグ&ドロップ操作の一環として、ドラッグされたデータを変更して、ターゲットと互換になるようにすることができます。データフォーマットが一致しない場合に、あるコントロールから別のコントロールにデータをドラッグする操作の例については、例:List コントロールから DataGrid コントロールへのデータのコピーを参照してください。この例では、いずれの DataGrid コントロールからでも他方に行をドラッグ&ドロップできます。前の例で実行する SWF ファイルは以下のとおりです。
同じコントロール内でのドラッグ&ドロップ
ドラッグ&ドロップを使用すると、リストコントロールのアイテムを同じコントロール内でドラッグ&ドロップすることにより再編成できます。次の例では、Tree コントロールを定義し、ユーザーがドラッグ&ドロップを使用して Tree コントロールのノードを再編成できるようにします。前の例で実行する SWF ファイルは以下のとおりです。リストコントロールには、ドラッグ&ドロップ操作を管理するためのプロパティとメソッドがあります。次の表に、そのプロパティとメソッドの一覧を示します。ドラッグデータの挿入位置を示すドロップ挿入インジケータに使用されるスキンの名前を指定します。コントロールがドラッグイニシエータであるかどうかを指定するブール値です。true の場合は、ユーザーが選択したアイテムをコントロールからドラッグできます。ユーザーがアイテムをコントロールからドラッグすると、次のデータオブジェクトを含む DragSource オブジェクトが作成されます。コントロール内の選択されたアイテム(複数の場合あり)のコピーです。イニシエータのコピーとフォーマットストリング "source"コントロールが、アイテムをデフォルト値で受け入れるドロップターゲットになれるかどうかを指定するブール値です。デフォルト値の場合は、ドラッグイベント用のイベントハンドラを記述する必要があります。この値が true の場合は、デフォルトのドロップ動作を使用してコントロールにアイテムをドロップできます。この値が true で、dragEnabled プロパティが true の場合は、ドラッグイニシエータからドロップターゲットにアイテムを移動またはコピーできるように指定します。アイテムを移動する場合は、アイテムはドロップターゲットに追加されたときにドラッグイニシエータから削除されます。この値が false の場合は、アイテムのドロップターゲットへのコピーのみが可能です。コピーの場合は、ドラッグイニシエータ内のアイテムはドロップによる影響を受けません。アイテムがドロップされるドロップターゲット内のアイテムインデックスを返します。dragDrop イベントハンドラが正しい場所にアイテムを追加する際に使用されます。ドロップターゲットのフィードバックを非表示にし、フォーカス矩形をターゲットから削除します。ターゲットコントロールの周囲にフォーカス矩形を表示し、ドロップ操作が発生する場所にドロップインジケータを表示します。コントロールにアクティブなスクロールバーがある場合、マウスポインタをコントロールの上端または下端に重ねると、コンテンツがスクロールします。通常このメソッドは、dragOver イベントのハンドラ内で呼び出します。
コピー中の型情報の維持
リストコントロールのビルトインサポートを使用して、リストコントロールから別のリストコントロールへデータをコピーする場合、コピーデータのデータ型情報が失われる場合があります。データ型情報は、次のような場合に失われる可能性があります。
2 つのリストコントロール間でコピー操作を実行した場合
移動操作ではこの現象は発生しません。as というクラスを定義し、List コントロールのデータプロバイダを生成するのに使用します。このメタデータタグは、Car データ型を Flex に登録する際、コピー処理中にこのデータ型情報を保持するために必要になります。次の例に示すように、このクラスをアプリケーションで使用します。前の例で実行する SWF ファイルは以下のとおりです。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
委譲クラスの作成
委譲を使用してカスタムコンポーネントをインスツルメントするには、次の手順を実行する必要があります。必要なインターフェイスを実装する委譲クラスを作成する。クラス定義 XML ファイルでコンポーネントを定義する。委譲クラスは、コンポーネントコードに埋め込まれない個別のクラスです。委譲クラスを使用すると、コンポーネントクラスのサイズが小さくなり、自動テストコードを最終的な運用 SWF ファイルに含める必要がなくなります。すべての Flex コントロールには独自の委譲クラスがあります。
これらのクラスは、mx
* パッケージに入っています。
委譲クラスを使用したインスツルメント
委譲クラスを作成します。次に簡単なコード例を示します。委譲クラスに次のコードを追加します。これは、QTP などのオートメーションツールに通常表示されるオブジェクトの名前です。これは、QTP などのオートメーションツールでのオブジェクトの値です。コンストラクタで、オートメーションツールが記録するイベントのイベントリスナーを追加します。このメソッドでは、再生が成功したかどうかを返します。ヘルパークラスのメソッドを使用して一般的なイベントを再生できます。
委譲の例については、mx
* パッケージ内の Flex コントロールのソースコードを参照してください。次のいずれかの方法を使用して、委譲クラスをアプリケーション SWF ファイルにリンクします。次の includes コンパイラオプションを追加して、委譲クラスをリンクします。compc コンポーネントコンパイラを使用して、委譲クラス用の SWC ファイルを構築します。この方法は、多くのコンポーネントと委譲クラスがあり、それらを 1 つのファイルにまとめる場合に有効です。新しい委譲クラスと共に Flex アプリケーションをコンパイルした後、エージェントとオートメーションツールの新しいインタラクションを定義する必要があります。QTP では、新しいコンポーネントを QTP のカスタムクラス定義 XML ファイルに追加することが必要です。詳細については、クラス定義ファイルの使用を参照してください。カスタムコンポーネントのインスツルメントの方法を示す例については、例:QTP 向けの RandomWalk カスタムコンポーネントのインスツルメントを参照してください。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
Flex 3 アプリケーションの構築と展開 / アプリケーションの開発 / ログ機能 / クライアントサイドのログとデバッグ
ログ API を使用すると、アプリケーションはメッセージをキャプチャし、ターゲットの設定済み出力に書き込むことができます。通常は、出力は trace() グローバルメソッドに等しくなりますが、アクティブなターゲットがサポートするものであれば、何でもかまいません。ログ API は、次の各部から構成されています。ロガーは、アクティブなターゲットにメッセージを送信するためのインターフェイスを備えています。ロガーは ILogger インターフェイスを実装しており、Log クラスのメソッドを呼び出します。カテゴリとレベルという 2 つの情報クラスが、メッセージをフィルタするために使用されます。各ロガーはカテゴリの下で動作します。カテゴリは、そのロガーから送信されたすべてのメッセージをフィルタするために使用する文字列です。例えば、orange というカテゴリを指定してロガーを取得できます。orange ロガーを使用して送信したすべてのメッセージは、orange カテゴリについてリストされたターゲットだけに達します。ロガーを使用して送信したすべてのメッセージに適用されるカテゴリとは異なり、レベルは、メッセージごとにさらにフィルタを行います。例えば、orange サブシステム内部でエラーが発生したことを示すには、メッセージをログするときにエラーレベルを使用します。ログ API を使用する Flex フレームワーククラスは、規則により、完全修飾クラス名をカテゴリに設定します。ログターゲットでは、ログメッセージの書き込み場所を定義します。このログターゲットはログ API をトレースシステムに接続し、ログメッセージが trace() メソッドの出力先と同じ場所に送信されるようにします。また、独自のカスタムログターゲットを記述することもできます。詳細については、ログ API を使用したカスタムロガーの実装を参照してください。出力先とはログメッセージが記述される場所です。通常、これはファイルですが、メモリ上のオブジェクトなど、コンソールや別の形式であることもあります。出力先の設定はクライアントで行います。次の例は、ロガー、ログターゲット、および移動先の関係の例を示しています。ログ API を使用して、作成したカスタムコードからメッセージを送信することもできます。これは、カスタム API やコンポーネントのセットを作成するときに、または Flex フレームワークのクラスを拡張する場合に、ユーザーがログ機能をカスタマイズできるように行います。詳細については、ログ API を使用したカスタムロガーの実装を参照してください。Flex フレームワーク内部の次のパッケージは、ログ API を使用する唯一のパッケージです。また、TraceTarget は、メッセージをログするクラス、およびログするメッセージのレベルを指定する場合にも使用できます。次の表では、ログレベルの定数とこれらの定数に対する数値を示し、各メッセージレベルを説明します。すべてのログレベルのメッセージのログを指定します。Flex の内部アクティビティをログします。これは、アプリケーションのデバッグ時にもっとも有効です。一般情報をログします。アプリケーションの問題が発生したときに、メッセージをログします。これらの問題によってアプリケーションの実行が中断されることはありませんが、さらにエラーが発生することはあります。重要なサービスが利用できない、あるいは、アプリケーションの使用を制限するような状況が発生した場合に、メッセージをログします。アプリケーションが終了するイベントが生じた場合に、メッセージをログします。FATAL のメッセージだけをログファイルに含める場合は、ログレベル FATAL を選択します。ログレベルを設定することにより、実行中のターゲットに送信するメッセージの量を制限できます。どのようなログレベルを指定した場合でも、それよりも「低い」レベルのメッセージがログに書き込まれます。例えば、ログレベルを DEBUG に設定すると、すべてのログレベルが含められます。
データサービスを使用する場合のログ API の使用
データサービスのクラスは、ログ API でクライアントおよびサーバーサイドのメッセージをログするために設計されています。
データサービスを使用する場合のログ API の有効化
TraceTarget ログターゲットを作成し、1 つまたは複数のフィルタプロパティに値を設定して、メッセージをログに出力するクラスを含めます。ログメッセージは特定のクラスまたはパッケージでフィルタできます。フィルタの定義にはワイルドカード(*)を使用できます。ログレベルはログターゲットの level プロパティで設定します。また、ログターゲットのプロパティを使用すると、イベント発生日時などの詳細をログファイルの出力に追加できます。MXML で、ログターゲットを設定することもできます。これを行うには、DEBUG などの定数ではなく 2 などの適切な数値を使用する必要があります。
ログ API を使用したカスタムロガーの実装
そのためには、ログターゲットを TraceTarget として定義し、メッセージをログするときにロガーのメソッドを呼び出します。前の例で実行する SWF ファイルは以下のとおりです。txt ファイルは次のようになります。メッセージをログするには、ILogger インターフェイスの適切なメソッドを呼び出します。ロガーは、レベルがログターゲットのログレベル以下である場合に、これらの呼び出しからのメッセージをログします。ターゲットのログレベルを all に設定すると、ロガーは、これらのメソッドのいずれかが呼び出されたときにメッセージを記録します。パフォーマンスを改善するために、各レベルに対応する静的メソッドが Log クラスに存在しています。このメソッドは、特定のレベルを任意のターゲットがリスンしているかどうかを示します。メッセージをログする前に、if ステートメントでこれらのいずれかのメソッドを使用して、コードの実行を防止できます。前の例では、すべてのカテゴリから送信されたメッセージをログします。フレームワークコードは、ロガーのカテゴリを、ログが実行されているクラスの完全修飾クラス名に設定します。
これは規則によるもので、Log
Flex フレームワーク内部でのログ作成用に filters プロパティを設定すると、ログの作成を特定のパッケージや他のクラスに限定できます。ワイルドカード文字は、配列の値の最後だけに表示できます。このメソッドにはカテゴリを定義する文字列を渡します。注意: ログ API を使用する Flex パッケージは、規則によりカテゴリを現在のクラス名として設定します。ただし、フィルタの定義に準拠する文字列であれば、任意の文字列でかまいません。カテゴリの値は、ログ対象のログメッセージのフィルタの、1 つ以上の定義に該当する必要があります。また、ILogger インターフェイスの log() メソッドはログメッセージのカスタマイズに使用することもできます。ログレベルもこのメソッドで指定できます。次の例では、このメソッドに渡されたログレベルでメッセージをログします。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
モジュールのロードとアンロード
Flex アプリケーションでモジュールをロードおよびアンロードするために使用できるいくつかの手法があります。これらの手法には次のようなものがあります。詳細については、ModuleLoader クラスを使用したモジュールのロードを参照してください。AIR アプリケーション内でモジュールを使用している場合、モジュールの SWF はメインアプリケーションの SWF かそのサブディレクトリのいずれかと同じディレクトリ内に置く必要があります。ModuleLoader クラスを使用すると、モジュールをアプリケーションや他のモジュールにロードできます。url プロパティの値を設定して、モジュールの SWF ファイルの場所を指定します。次の例では、アプリケーションの最初の起動時にモジュールをロードしています。前の例で実行する SWF ファイルは以下のとおりです。モジュールをロードするタイミングは、イベントに応答する時点などで url プロパティの値を設定することにより変更できます。また、そのプロパティの値を変更したときにも発生します。url プロパティの値を空のストリング("")に設定すると、現在のモジュールがアンロードされます。次の例では、TabNavigator コンテナの該当するタブにユーザーが移動したときにモジュールをロードしています。前の例で実行する SWF ファイルは以下のとおりです。これらのメソッドはパラメータを受け取りません。次の例では、ボタンをクリックしたときに、モジュールをロードまたはアンロードします。前の例で実行する SWF ファイルは以下のとおりです。モジュールをロードするとき、そのモジュールの load() メソッドを何回呼び出したかにかかわらず、Flex では必ず 1 つのモジュールのコピーだけがロードされます。名前が同じで実装が異なる 2 つのクラスをロードする場合、最初にロードされたクラスが使用されるクラスとなります。これが原因で、ランタイムエラーが発生することがあります。複数のモジュールを使用するときに発生する一般的な問題は、他のモジュールで使用する必要があるクラス定義をモジュールが所有することです。クラス定義は子アプリケーションドメインにあるので、最初にクラス定義をロードしたモジュールはそのクラスを使用できますが、他のモジュールがそのクラスを使用しようとするとエラーが発生します。この解決方法は、クラス定義をメインアプリケーションドメインに格上げして、すべてのモジュールでそのクラスを使用できるようにすることです。詳細については、モジュールのドメインを参照してください。この手法は <mx:ModuleLoader> タグを使用するよりも抽象性は減少しますが、モジュールをロードする方法やその時期をより詳細に制御できます。次に、そのインターフェイスの load() メソッドを呼び出します。最後に、そのインターフェイスの factory プロパティを使用して create() メソッドを呼び出し、戻り値をモジュールのクラスとしてキャストします。これらのどちらも指定しない場合、モジュールは新しい子ドメイン内にロードされます。swf ファイルをロードし、そのファイルを表示リストに追加して、アプリケーションの起動時にそのファイルが表示されるようにしています。前の例で実行する SWF ファイルは以下のとおりです。MXML ベースのモジュールは、他のモジュールをロードすることができます。さらに、それらのモジュールが他のモジュールをロードし、それを続けることができます。モジュールインスタンスは、関数のローカルスコープ内に含まれないように、関数の外側で定義してください。これに従わないと、オブジェクトがガベージコレクションされたり、関連するイベントリスナーが呼び出されなかったりする場合があります。
異なるサーバーからのモジュールのロード
あるサーバーから、異なるサーバー上で実行されているアプリケーションにモジュールをロードするには、モジュールとそのモジュールをロードするアプリケーションとの間に、信頼関係を確立する必要があります。
ドメイン間のアプリケーションのアクセス
ロードするアプリケーションで allowDomain() メソッドを呼び出し、モジュールのロード元であるターゲットドメインを指定する必要があります。そのためアプリケーションの初期化前イベントハンドラでロード対象ドメインを指定し、モジュールがロードされる前に、確実にアプリケーションが設定されるようにします。モジュールが置かれているリモートサーバーのクロスドメインファイルで、ロードアプリケーションを実行しているサーバーを指定するエントリを追加します。ロードするアプリケーションの初期化前イベントハンドラで、リモートサーバー上のクロスドメインファイルをロードします。ロードされたモジュールで allowDomain() メソッドを呼び出し、メソッドがローダーと通信できるようにします。次の例は、ロード元のアプリケーションの init() メソッドを示しています。次の例は、ロードされたモジュールの init() メソッドを示しています。次の例は、リモートサーバーに存在するクロスドメインファイルを示しています。
クロスドメインポリシーファイルの使用の詳細について、『Adobe Flex 3 アプリケーションの構築とデプロイ』のFlex へのセキュリティの適用
モジュールのプリロード
モジュールを使用するアプリケーションを最初に起動したときには、アプリケーションのファイルサイズはモジュールを使用していない類似のアプリケーションよりも小さくなります。このため、モジュールの SWF ファイルがネットワーク経由で転送される前にアプリケーションをメモリ内にロードして Flash Player 内または AIR 内で実行できるので、待ち時間が短縮されます。ただし、モジュールを使用しているアプリケーションの部分にユーザーが移動したときは、遅延が生じます。これは、モジュールはデフォルトではプリロードされるのではなく、最初に要求されたときにロードされるからです。モジュールが Flex アプリケーションによって最初にロードされたときに、そのモジュールの SWF ファイルがネットワーク経由で転送されてブラウザのキャッシュに格納されます。Flex アプリケーションがモジュールをアンロードした後にリロードする場合、Flash Player はネットワーク経由ではなくキャッシュからモジュールをロードするので、待ち時間が短縮されます。モジュールの SWF ファイルは、ユーザーがキャッシュをクリアしない限り、すべての SWF ファイルが同様にブラウザのキャッシュに残ります。したがって、メインアプリケーションでは複数のセッションに渡り、ロード時間を短縮してモジュールをロードできます。ただし、これは、ブラウザのキャッシュがフラッシュされる頻度に依存します。モジュールはいつでもプリロードできるので、モジュールが現在使用されていない場合でもモジュールの SWF ファイルをメモリ内に配置しておくことができます。このメソッドはモジュールをメモリ内にロードしますが、モジュールのインスタンスは作成されません。プリロードを使用しない場合、ユーザーは、TabNavigator の 2 番目のペインに移動したときに、ネットワーク経由で SWF ファイルが転送されるのを待つことになります。前の例で実行する SWF ファイルは以下のとおりです。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
インターフェイスについて
インターフェイスは、コンポーネントのアウトラインとして動作するように設計する一種のクラスです。インターフェイスを記述する場合は、実装ではなく、パブリックメソッドの名前だけを指定します。例えば、2 つのメソッドをインターフェイスに定義し、そのインターフェイスを実装した場合、実装クラスはこれらの 2 つのメソッドの実装を提供しなければなりません。定数を指定することはできません。インターフェイスのメリットは、そのインターフェイスを実装するすべてのクラスが従わなければならない約束ごとを定義できることです。さらに、クラスでインターフェイスを実装すると、当該クラスのインスタンスをそのインターフェイスにキャストできるようになります。この属性は、すべての MXML タグでサポートされています。次のコードは、いくつかのメソッドを宣言するシンプルなインターフェイスの例です。このクラスでは、メソッドを実装する必要があります。次の例に示すように、個々のインターフェイスをカンマで区切ることで、複数のインターフェイスを実装できます。インターフェイス内で宣言したメソッドはすべてパブリックと見なされます。インターフェイスを宣言した後で実装する際に、そのインターフェイスの一部のメソッドを実装しなかった場合は、MXML コンパイラによりエラーがスローされます。カスタムコンポーネントに実装されたメソッドは、インターフェイスの対応するメソッドと同じ戻り値の型を持つ必要があります。インターフェイスに戻り値の型が指定されていない場合は、実装するメソッドで、任意の戻り値の型を宣言できます。MXML コンポーネントのコンストラクタを定義することはできません。定義すると、Flex コンパイラから重複する機能を定義したことを示すエラーメッセージが発行されます。通常、Flex コンポーネントには、コンストラクタの代わりにイベントリスナーを使用できます。これらのイベントはすべて UIComponent クラスによって定義され、そのすべてのサブクラスに継承されます。UIComponent のサブクラスではない MXML コンポーネントを作成する場合、これらのイベントを利用することはできません。次の例では、このコンポーネントを使用しています。前の例で実行する SWF ファイルは以下のとおりです。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
ViewStack ナビゲータコンテナは、相互に積み重ねられた子コンテナのコレクションによって構成され、一度に 1 つのコンテナだけが表示されます(これを「アクティブになる」と言います)
ViewStack コンテナには、現在アクティブなコンテナをユーザーが切り替えるメカニズムは組み込まれていません。例えば、子コンテナ間の切り替えを制御する一連の Button コントロールを定義できます。次の例は、ViewStack コンテナ内の積み重ねられた子コンテナを示します。
子コンテナ 0 がアクティブ
右の図は、2 つ目の子コンテナがアクティブな状態の ViewStack コンテナを表しています。アクティブにする子コンテナを制御するには、ViewStack コンテナの次のプロパティを使用します。selectedIndex 子コンテナが定義されている場合、現在アクティブなコンテナのインデックスを表します。子コンテナが定義されていない場合、このプロパティの値は -1 になります。このプロパティをアクティブにするコンテナのインデックスに設定します。次の例では、デフォルトでアクティブにするコンテナのインデックスを 1 に設定しています。子コンテナが定義されていない場合、このプロパティの値は null になります。注意: Application コンテナを除くすべてのコンテナでは、親コンテナの作成ポリシーがデフォルトのポリシーになります。したがって、ほとんどの場合、View Stack コントロールの子は選択されるまで作成されません。また、子コンテナを制御する 3 つの Button コントロールを定義し、ボタンをクリックしてアクティブにする子コンテナを選択します。前の例で実行する SWF ファイルは以下のとおりです。この例をロードすると、3 つの Button コントロールが表示され、ViewStack コンテナで最初に定義された子コンテナがアクティブになります。Button コントロールをクリックすると、アクティブコンテナが変わります。これらのクラスは NavBar クラスのサブクラスなので、総称して「ナビゲータバーコントロール」と呼びます。ナビゲータバーコントロールは ViewStack コンテナに含まれる子コンテナの数を調べ、次の図のように水平または垂直に並んだリンク、タブ、またはボタンを作成します。ユーザーはこれらのエレメントを使用して、アクティブにする子コンテナを選択できます。前の例で実行する SWF ファイルは以下のとおりです。このプロパティでは、ナビゲータバーコントロールに関連付ける ViewStack の名前を指定します。ViewStack コンテナのデフォルトの幅と高さは、最初の子の幅と高さになります。ViewStack コンテナのサイズは、アクティブな子が変更されても変わりません。次のテクニックを使用すると、ViewStack コンテナのサイズを制御して、ViewStack コンテナの子の中にすべてのコンポーネントを表示できます。すべての子のパーセント値ベースの width プロパティと height プロパティを明示的に同じ固定値に設定します。どのテクニックを使用するかは、作成するアプリケーションと ViewStack コンテナの内容に応じて決定してください。hideEffect プロパティで指定したエフェクトはコンテナが非表示になると再生され、showEffect プロパティで指定したエフェクトは新しい子が表示されると再生されます。ViewStack コンテナは、非表示になるコンテナの hideEffect プロパティに指定されたエフェクトが完了するまで待機し、その後で新しい子コンテナを表示します。前の例で実行する SWF ファイルは以下のとおりです。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
SWF ファイルサイズの縮小
Flex 3 アプリケーションの構築と展開 / アプリケーションのデザイン / Flex アプリケーションの最適化 / クライアントサイドのパフォーマンスの向上
SWF ファイルサイズの縮小
アプリケーションの起動時間を短縮すると、初めてアプリケーションを使用する際のユーザー体験を改善することができます。起動時間は、サーバーからクライアントに返される SWF ファイルのダウンロード処理の時間によって決まります。SWF ファイルが小さいほど、ダウンロード所要時間が短くなります。さらに、SWF ファイルのサイズを小さくすると、アプリケーションの初期化時間も短くなります。mxmlc コンパイラには SWF ファイルサイズを縮小する上で役立ついくつかのオプションが用意されています。
バイトコードオプティマイザの使用
バイトコードオプティマイザでは、バイトコードの統合とピープホールの最適化を使用して、Flex アプリケーションの SWF ファイルのサイズを縮小します。ピープホールを最適化すると、重複した手順をバイトコードから除去できます。
デバッグの無効化
デバッグを無効にすると、SWF ファイルのサイズを縮小できます。デバッグを有効にすると、Flex コンパイラには、デバッグ環境だけで使用される SWF ファイルの行番号とその他のナビゲーション情報が含まれます。デバッグの詳細については、コマンドラインデバッガの使用を参照してください。strict コンパイラオプションを true に設定すると、コンパイラは、アプリケーションで import ステートメントの定義とパッケージ名が使用されているかどうかを検証します。インポートしたクラスが使用されていない場合は、コンパイラはエラーを報告します。次に、strict モードでコンパイラエラーがスローされる例をいくつか示します。strict オプションは、コンパイル時タイプのチェックも行います。これにより、実行時のアプリケーションの最適化がわずかに向上します。
リンカー依存の確認
このコンパイラオプションで出力されるレポートには、XML 形式でリンカー依存が表示されます。次の表で、このファイルで使用されるタグについて説明します。アプリケーションの SWF ファイル作成に使用されるコンパイル単位名を示します。コンパイル単位はクラス、関数、名前空間などの一般定義を 1 つ以上含む必要があります。name 属性にはスクリプトの格納元が表示されます。swc など)のいずれかで示されます。コマンドラインで keep-generated=true と設定すると、生成されたフォルダのすべてのクラスが、このファイルのスクリプトとしてリストされます。size 属性にはクラスのサイズがバイト単位で示されます。mod 属性は、スクリプトが作成されたときのタイムスタンプを示します。定義の名前を示します。スクリプト同様、定義にはクラス、関数、または名前空間を使用できます。現在の定義をリンクする前に SWF ファイルにリンクする必要のある定義を示します。このタグは前提条件を意味します。
クラス定義の場合、このタグは、直接的な親クラス(flash
これは、現在のスクリプトが必要とする定義への参照です。他の定義に依存していないスクリプト定義も存在するので、<script> タグに <dep> 子タグがないこともあります。リンクされなかったアセットに対する依存を示します。アプリケーション定義の前提条件と依存関係のリストを確認できます。誤ってリンクしているクラスがあることに気付く場合があります。コードを記述するときには、クラスを参照するのが一般的で、アプリケーションに実際にそのクラスを含める必要があるわけではありません。参照を設定すると、参照先クラスにリンクが設定されますが、それだけでなく、参照先クラスが依存するすべてのクラスにもリンクが設定されます。リンカーレポートを確認すると、必要のないクラスへのリンクが見つかることがあります。不要なクラスを見つけた場合は、そのクラスへのリンクの原因となっているリンカーの依存関係を特定し、コードを記述し直してこの依存関係を排除します。
使用しないクラスの初期化の防止
次の例では、クラスが Button コントロールであるかどうかをチェックします。前の例で実行する SWF ファイルは以下のとおりです。このメソッドは、クラスを SWF にリンクしないで、クラスの名前と比較できる文字列を返します。次の例では、Button コントロールにリンカー依存が生成されません。前の例で実行する SWF ファイルは以下のとおりです。
アセットの外部化
Flex アプリケーションで使用される外部化の方法は各種あります。例えば、次のような方法があります。モジュールを使用する。実行時スタイルシートを使用する。ランタイム共有ライブラリ(RSL)を使用する。アセットを埋め込まずに実行時にロードする。この節では、実行時にアセットをロードする方法を説明します。モジュールと実行時スタイルシートの詳細については、Adobe Flex 3 開発ガイドを参照してください。SWF ファイルのサイズを小さく抑える 1 つの方法として、アセットを外部化する方法があります。この方法では、アセットをコンパイル時に埋め込むのではなく、実行時にロードします。この処理は、イメージ、SWF ファイル、サウンドファイルなどのアセットに使用できます。イメージを埋め込んだ場合、埋め込まれたイメージは Flex SWF ファイルの一部となるので、ロードは直接的に行われます。ただし、アプリケーションのサイズが増えるので、アプリケーションの初期化プロセスは遅くなります。また、埋め込まれたアセットの場合、アセットに変更を加えるたびにアプリケーションを再コンパイルする必要があります。サポートされているイメージタイプで、実行時にロードできない唯一のタイプは SVG です。xml ファイルまたは他のメカニズムを使用して、適切な許可を有効にする必要があります。xml ファイルの使用の詳細については、クロスドメインポリシーファイルの使用を参照してください。アセットを外部化して SWF ファイルを小さくする代わりに、アセットを埋め込むと SWF ファイルのサイズが大きくなります。イメージ、サウンド、SWF ファイルなどのアセットを埋め込むことで、ネットワーク帯域幅と接続を削減できます。SWF ファイルのサイズは大きくなりますが、アプリケーションによるサーバーへのネットワーク接続回数を減らすことができます。
埋め込みフォントに対する文字範囲の使用
埋め込みフォントのフェイスを構成するシンボルの範囲を指定することにより、埋め込みフォントのサイズを小さくできます。フォント内のすべての文字を記述する必要があります。これらの文字の一部を削除すると、各埋め込みフォントに対して必要な記述情報全体のサイズが小さくなります。文字の Unicode 値を使用して、個別の文字または文字範囲を指定します。1 つのフォント宣言に対して複数の範囲を設定できます。次に例を示します。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
プロファイラの使用
1、および Flex 3 用にコンパイルされた、アプリケーションをプロファイルできます。プロファイラは、プロファイルを実行中のアプリケーションのデバッグ情報を必要とします。アプリケーションをコンパイルしてプロファイラを起動すると、Flex Builder によってデフォルトでデバッグ情報がアプリケーションに含まれます。debug コンパイラオプションを true に設定することによって、デバッグ情報をアプリケーションに明示的に含めることができます。「リリースビルドの書き出し」オプションを使用してアプリケーションを書き出す場合、アプリケーションにデバッグ情報は含まれません。
プロファイラの起動、停止および再開
プロファイリングセッション中にアプリケーションがコンパイルおよび実行されるときに、デバッグ情報が含まれます。現在 Flex Builder で開発中ではないが、SWF ファイルが URL またはファイルシステムで使用可能な外部アプリケーションもプロファイリングできます。アプリケーションをプロファイリングするには、アプリケーションの SWF ファイルにデバッグ情報が含まれている必要があります。詳細については、外部アプリケーションのプロファイリングを参照してください。
Flex アプリケーションのプロファイリングの開始
ブラウザのインスタンスをすべて閉じます。ブラウザのすべてのインスタンスをまだ閉じていない場合は、すべて閉じるように Flex Builder によって通知されます。「OK」ボタンをクリックします。Flex Builder によりアプリケーションがコンパイルされ、別のブラウザウィンドウで起動されます。プロファイラを設定ダイアログボックスでオプションを選択し、「再開」をクリックします。アプリケーションをプロファイリングするには、「メモリのプロファイリングを有効にする」オプションまたは「パフォーマンスのプロファイリングを有効にする」オプションを選択する必要があります。次の表でオプションについて説明します。アプリケーションの起動元のサーバーを示します。アプリケーションがプロファイラと同じコンピュータ上で実行中の場合、この値は localhost です。この値は変更できません。ただし、別のコンピュータで実行中のアプリケーションはプロファイリングできます。プロファイリングを行うアプリケーションが表示されます。この値は変更できません。メモリのプロファイリングを有効にする。メモリデータを収集するようにプロファイラに指示します。メモリリークの検出または過剰なオブジェクト作成の発見を行うにはこのオプションを使用します。パフォーマンスのプロファイリングを行う場合は、このオプションを選択解除できます。デフォルト値では、オプションは選択されています。
ライブメモリデータを監視
プロファイリング中にライブオブジェクトビューにメモリデータを表示するようにプロファイラに指示します。メモリまたはパフォーマンスのプロファイリング実行では、このオプションは必須ではありません。「メモリのプロファイリングを有効にする」を選択した場合にのみ、このオプションを選択できます。デフォルト値では、オプションは選択されています。
オブジェクト割り当てスタックトレースの生成
新しいオブジェクトが作成されるごとに、スタックトレースをキャプチャするようにプロファイラに指示します。このオプションを有効にするとプロファイリングが遅くなる場合があるので、絶対に必要な場合にのみ有効にしてください。「メモリのプロファイリングを有効にする」が選択されている場合のみ、このオプションを選択できます。デフォルト値では、オプションは選択されていません。このオプションを選択しない場合、オブジェクト参照ビューまたは割り当てトレースビューで割り当てトレース情報を参照できません。パフォーマンスのプロファイリングを有効にする。プロファイラによって、サンプリングの間隔でスタックトレースデータが収集されるようにします。これらのサンプルを使用して、アプリケーションで実行時間の大部分を占めている場所を特定します。メモリのプロファイリングを行う場合は、このオプションを選択解除できます。デフォルトでは、このオプションは選択されています。プロファイリングの環境設定を変更することによって、これらのオプションのデフォルト値を変更できます。詳細については、プロファイラの環境設定を参照してください。これで、アプリケーションの操作を開始してプロファイラデータを調べることができます。
Flex アプリケーションのプロファイリングの一時停止と再開
プロファイラを起動した後、プロファイルビューでアプリケーションを一時停止および再開できます。アプリケーションを選択し、そのアプリケーションで実行するアクションを選択します。次の例は、複数のアプリケーションが表示されているプロファイルビューを示しています。1 つのアプリケーションが現在実行中であり、他のアプリケーションはすべて終了しています。プロファイルビューでアプリケーションを選択します。「中断」ボタンをクリックします。アプリケーションのプロファイリングを再開するには、アプリケーションを選択して「再開」ボタンをクリックします。
Flex アプリケーションのプロファイリングの終了
プロファイルビューでアプリケーションを選択します。「終了」ボタンをクリックしてプロファイリングセッションを終了します。この操作によってブラウザが閉じられたり、Player プロセスが終了されるわけではありません。手動で実行する必要があります。Flex 開発パースペクティブに戻るには、パースペクティブのドロップダウンリストから「Flex 開発」を選択します。
プロファイラのボタンについて
次の表で、プロファイラのツールバー上のボタンについて説明します。プロファイリングセッションを再開します。このオプションは、アプリケーション名が選択されていて現在中断されている場合のみ有効です。プロファイリングセッションを中断します。このオプションは、アプリケーション名が選択されていて現在実行している場合のみ有効です。プロファイリングセッションを終了します。このオプションは、アプリケーション名が選択されていて、まだ終了していない場合のみ有効です。
ガベージコレクタを実行
このオプションは、アプリケーション名が選択されていて現在実行している場合のみ有効です。ガベージコレクションの詳細については、ガベージコレクションについてを参照してください。
メモリのスナップショット
アプリケーションのメモリ使用量を保存して、検討または他のスナップショットとの比較を行えるようにします。このオプションは、アプリケーション名が選択されていて、そのアプリケーションが現在実行中の場合、および起動ダイアログボックスで「メモリのプロファイリングを有効にする」を選択した場合にのみ有効です。プロファイラによって、新しいメモリのスナップショットが、プロファイルビューで選択されたアプリケーションの子として追加されます。新しいメモリのスナップショットをメモリのスナップショットビューで開くには、メモリのスナップショットのエントリをダブルクリックします。メモリのスナップショットが記録される前に、ガベージコレクションが暗黙的に行われます。つまり、メモリのスナップショットボタンをクリックすることは、ガベージコレクタを実行ボタンをクリックしてからメモリのスナップショットボタンをクリックすることと同じです。メモリのスナップショットの詳細については、メモリのスナップショットビューの使用を参照してください。
不明なオブジェクトを検索
2 つのメモリのスナップショットをリークオブジェクトビューで比較します。このオプションは、2 つのメモリのスナップショットが選択されている場合および起動ダイアログボックスで「メモリのプロファイリングを有効にする」を選択した場合にのみ有効です。リークオブジェクトビューの詳細については、リークオブジェクトビューの使用を参照してください。
割り当てトレースを表示
2 つのメモリのスナップショット間のメソッドを割り当てトレースビューで比較します。このオプションは、2 つのメモリのスナップショットが選択されている場合および起動ダイアログボックスで「メモリのプロファイリングを有効にする」を選択した場合にのみ有効です。割り当てトレースビューの詳細については、割り当てトレースビューの使用を参照してください。
パフォーマンスデータをリセット
パフォーマンスのプロファイリングデータをクリアします。このオプションは、アプリケーション名が選択されていて、そのアプリケーションが実行中の場合、および起動ダイアログボックスで「パフォーマンスのプロファイリングを有効にする」を選択した場合にのみ有効です。一般に、このボタンをクリックし、アプリケーションを操作し、パフォーマンスのプロファイルをキャプチャボタンをクリックして、データをリセットした時点からのアプリケーションのパフォーマンスのスナップショットを取得します。パフォーマンスのプロファイルビューの詳細については、パフォーマンスのプロファイルビューの使用を参照してください。
パフォーマンスのプロファイルをキャプチャ
選択されたアプリケーションの子として、新しいパフォーマンスのスナップショットを保存します。このオプションは、アプリケーション名が選択されていて、そのアプリケーションが実行中の場合、および起動ダイアログボックスで「パフォーマンスのプロファイリングを有効にする」を選択した場合にのみ有効です。パフォーマンスのプロファイルビューを開くには、パフォーマンスのスナップショットのエントリをダブルクリックします。パフォーマンスのプロファイルビューの詳細については、パフォーマンスのプロファイルビューの使用を参照してください。選択されたスナップショットのデータをメモリから消去します。アプリケーションが終了している場合は、このボタンをクリックするとアプリケーションもプロファイルビューから削除されます。このオプションは、パフォーマンスのスナップショットまたはメモリのスナップショットが選択されている場合にのみ有効です。メソッドの統計情報やオブジェクトの統計情報など、プロファイラの一部のビューには、スタックの移動またはビューの変更に使用するナビゲーションボタンがあります。次の表で、これらプロファイラのビューのナビゲーションボタンについて説明します。最初に選択したメソッドから現在表示しているメソッドまで、移動したメソッドをすべて表示します。現在表示しているメソッドおよび現在選択しているメソッドに至るメソッドを表示します。このアイテムは、前のメソッドに戻った後に有効です。最初に選択したメソッドを表示します。ソースファイルを開く。選択されたメソッドのソースコードを表示するソースエディタを開きます。テーブルに含めるメソッドを制御することができます。詳細については、プロファイラフィルタについてを参照してください。
未使用メソッドを表示/非表示
平均時間列の時間が 0
00(これは、どのサンプルにも出現しなかったという結果です)のメソッドを表示または非表示にします。
プロファイリングデータの保存およびロード
プロファイラの実行後に、そのデータを保存して、現在のプロファイリングセッションのスナップショットと、コードに変更を加えた後に取得するスナップショットを比較することができます。これは、問題領域を正しく特定しているかどうか、および変更によってアプリケーションのパフォーマンスとメモリ使用量が改善するかどうかを判別するのに役立ちます。プロファイリングデータを保存するとき、そのプロファイル内のすべてのアプリケーションデータを保存します。すべてのパフォーマンスのプロファイル、メモリのスナップショットおよび割り当てトレースが含まれます。この情報は、Flex Builder によって、指定した場所のバイナリファイルのグループに書き込まれます。
プロファイリングデータの保存
プロファイルビューでアプリケーションを選択します。プロファイルビューでドロップダウンリストを開き、「保存」を選択します。プロファイルデータを保存する場所を選択し、「OK」をクリックします。保存するプロファイリングデータのセットごとに新しいフォルダを作成する必要があります。新しいフォルダを作成しないと、同じフォルダを選択した場合に古いデータが新しいデータで上書きされます。
保存したプロファイリングデータの取得
保存したプロファイリングデータビューを選択します。「開く」ボタンをクリックします。アプリケーションのプロファイルデータが含まれているフォルダに移動し、「OK」をクリックします。保存したプロファイリングデータビューに、使用可能なプロファイリングデータが表示されます。このビューでアプリケーションを再開することはできませんが、保存したメモリのスナップショット、パフォーマンスのプロファイルまたは他のデータを参照できます。
プロファイリングデータの削除
プロファイルビューで、アプリケーションからスナップショットを選択します。「削除」ボタンをクリックします。
プロファイラの環境設定
設定がすべてのプロファイリングセッションに適用されるように、プロファイラの環境設定を行うことができます。これらの設定を使用して、アプリケーションのプロファイリングで使用する Flash Player およびブラウザを定義できます。また、デフォルトのフィルタや、プロファイリングされるアプリケーションがサーバーで実行されている場合にアプリケーションを使用できるポート番号を定義できます。設定ダイアログを開き、Flex/プロファイラを選択します。次の例は、プロファイラの環境設定を示しています。プロファイラメニューでオプションを選択し、さまざまなオプションに移動します。次の表で、設定できる環境設定について説明します。デフォルトのプロファイリング方法を選択できます。メモリのプロファイリングおよびパフォーマンスのプロファイリングを有効または無効にするオプションを選択します。プロファイリングされるアプリケーションを Flex Builder がリスニングするポート番号を定義できます。デフォルトのポート番号は 9999 です。デバッガで 7935 ポートを使用するため、ポートをこの番号に変更することはできません。プロファイラのビューから除外されるデフォルトのパッケージを定義できます。フィルタの使用の詳細については、プロファイラフィルタについてを参照してください。プロファイラのビューに含まれるデフォルトのパッケージを定義できます。その他のパッケージはすべて除外されます。フィルタの使用の詳細については、プロファイラフィルタについてを参照してください。
プレーヤーとブラウザ
プロファイリングされるアプリケーションを実行するために Flex Builder によって使用される Flash Player 実行可能ファイルおよびブラウザ実行可能ファイルの場所を定義できます。
外部アプリケーションのプロファイリング
Flex Builder で開発中のアプリケーションをプロファイリングする以外に、外部アプリケーションをプロファイリングできます。外部アプリケーションは、アクセスできる任意の場所にある SWF ファイルである可能性があります。これには、リモート Web サーバー上にあるアプリケーションや、ローカルファイルシステム上のアプリケーションが含まれます。外部アプリケーションは、プロファイリングの前に、デバッグ情報を含めてコンパイルされている必要があります。デバッグ情報を含めてアプリケーションをコンパイルするには、debug=true をコンパイラ引数に追加します。プロファイリングする外部アプリケーションとして指定できるのは、SWF ファイルのみです。アプリケーションにデバッグ情報が含まれていない場合、Flex Builder によって次のエラーが返されます。このエラーが表示された場合は、debug コンパイラオプションを true に設定してアプリケーションを再コンパイルし、再度起動します。SWF ファイルについて、URL またはファイルシステムの場所を指定できます。アプリケーションを正常にプロファイリングするには、デバッガバージョンの Flash Player がブラウザで使用されている必要があります。一般に、URL を使用してファイルを要求します。スタンドアロンバージョンの Flash Player でのアプリケーションの実行によって、特にアプリケーションでリモートサービスまたはネットワーク呼び出しが使用されている場合に、予期しない結果が生じることがあります。
外部アプリケーションのプロファイリング
Flex プロファイリングパースペクティブに変更します。プロファイル/外部アプリケーションのプロファイルを選択します。外部アプリケーションのプロファイルダイアログボックスが表示されます。「選択したアプリケーションを起動」オプション(デフォルト)を選択し、「新規」ボタンをクリックします。アプリケーションを追加ダイアログボックスが表示されます。「Flex Builder の外部でアプリケーションを手動起動」オプションを選択して、アプリケーションを手動で起動することもできます。SWF ファイルの場所を入力して「OK」をクリックするか、「参照」ボタンをクリックしてファイルシステム上のアプリケーションを検索します。「起動」ボタンをクリックします。アプリケーションの場所について URL を指定した場合、Flex Builder によってアプリケーションがデフォルトのブラウザで起動されます。debug コンパイラオプションを true に設定してアプリケーションを再コンパイルし、再度起動します。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
宣言型セキュリティとプログラム型セキュリティの比較
セキュリティに対する 2 つの一般的なアプローチとして、宣言型セキュリティとプログラム型セキュリティがあります。多くの場合、宣言型セキュリティはサーバーベースです。サーバーの設定を使用して、リソースまたはリソースのセットを保護します。コンテナの認証および承認スキームを使用して、そのリソースを不正なアクセスから保護します。宣言型セキュリティのアプローチでは、大略的なセキュリティ設定が可能になります。宣言型セキュリティは、そのセキュリティの対象となる Web コンポーネントとは個別の層として実装されます。セキュリティシステム(ファイルのアクセス許可、またはユーザー、グループ、ロールなどのセット)を設定し、アプリケーションの認証メカニズムをこのセキュリティシステム層に適用します。宣言型セキュリティを使用した場合は、ユーザーがリソースにアクセスできるか、できないか、のいずれかになります。通常は、コンテンツをロールに応じてカスタマイズすることはできません。その結果、HTML ベースのアプリケーションでは、ユーザーは特定のページへのアクセスを拒否されます。ただし、Flex 環境で宣言型セキュリティを使用すると、通常はアプリケーション全体へのアクセスが拒否されるようになります。これは、コンテナからは、アプリケーションが 1 つのリソースとして認識されるからです。宣言型セキュリティを使用すると、Web アプリケーションを作成するプログラマは、アプリケーションの作成環境を無視することができます。宣言型セキュリティの設定と保守は、通常はアプリケーションの開発者ではなく、展開担当者が行います。また、Web アプリケーションを更新しても、通常はセキュリティモデルのリファクタリングは必要ありません。プログラム型セキュリティでは、アプリケーションの開発者は、アプリケーションとそのリソースへのアクセスを詳細に制限できます。プログラム型セキュリティでは、宣言型のセキュリティよりも詳細な設定が可能です。例えば、プログラム型セキュリティを使用している開発者は、アプリケーション内の特定のコンポーネントに対するユーザーアクセスを許可または拒否することができます。プログラム型セキュリティは、多くの場合、アプリケーションの開発者によって設定されます。ただし、通常は宣言型セキュリティと同じシステムとやり取りするので、プログラム型セキュリティを実装する際にアプリケーションの開発者と展開担当者との関係が協力的である必要があります。ほとんどのアプリケーションでは、プログラム型セキュリティよりも宣言型セキュリティをお勧めします。これは、このデザインではコードの再利用性が向上し、保守が簡単になるからです。さらに、宣言型セキュリティでは、実装の専門家がセキュリティの責任者になるので、アプリケーションプログラマはアプリケーションの作成に集中でき、アプリケーションを特定の環境に展開する担当者は、セキュリティポリシーの適用に集中して、そのコンテキストを活用できるようになります。
クライアントセキュリティの概要
セキュリティの問題を考慮する場合、Flex アプリケーションを従来の Web アプリケーションとは見なさないでください。Flex アプリケーションは通常、クライアントによって一度だけロードされるモノシリック(一体型)SWF ファイルであるか、あるいはモジュールまたは RSL としてロードされる SWF ファイルのセットです。一方、標準的な Web アプリケーションは、一斉にロードされる多数の個別ページから構成されます。ほとんどの Web アプリケーションは、クライアント外部の Web サービスなどのリソースにアクセスします。Flex アプリケーションが外部のリソースにアクセスする場合は、次の 2 つの要素が考慮されます。
このリソースに対するアクセスをユーザーが許可されているかどうか
クライアントがリソースをロードできるかどうか
または、サンドボックスの制限によりリソースのロードが禁止されているかどうか
デフォルトでは、次の基本的なセキュリティルールが常に適用されます。同じセキュリティサンドボックス内のリソースは、常に互いにアクセスできます。リモートサンドボックス内の SWF ファイルは、ローカルファイルおよびデータにはアクセスできません。次に示すクライアントアーキテクチャに関連するセキュリティ上の問題は、Flex アプリケーションに影響するので考慮が必要です。Flash Player のセキュリティの大部分は、ロードされた SWF ファイル、メディア、およびその他のアセットの元のドメインに基づいて決まります。com などの特定のインターネットドメインの SWF ファイルは、そのドメイン内のすべてのデータに常にアクセスできます。これらのアセットは、セキュリティサンドボックスと呼ばれる同じセキュリティグループに配置されます。例えば、SWF ファイルは、ドメイン内の SWF ファイル、ビッドマップ、オーディオ、テキストファイル、およびその他のアセットをダウンロードできます。0 を使用して記述されていれば可能です。
メモリ使用量とディスクストレージの保護
Flash Player には、クライアントコンピュータのディスクデータとメモリ使用量のセキュリティ保護機能があります。これは、所有する SWF ファイルと関連する名前を持つディレクトリ内のファイルとして実装されます。通常、Flex アプリケーションは、SharedObject データファイル以外のクライアントコンピュータ上のファイルの作成、編集、または削除はできません。また、ドメインごとに指定された設定の下でのみ SharedObject データファイルにアクセスできます。Flash アプリケーションの作成者は、ユーザーが制限を超えるデータを格納しようとしたときに、ディスク記憶領域を増やすように求めるメッセージを表示するか、または Flash Player が自動的に警告を表示するようにアプリケーションを設定できます。いずれの場合でも、ユーザーがそのドメインに対する割り当ての増加を明示的に許可しない限り、ディスク記憶領域の制限が Flash Player によって適用されます。Flash Player には、メモリとプロセッサのための安全対策が講じられており、アプリケーションが無期限に大量のシステムリソースを占有しないよう防止します。例えば、Flash Player は無限ループに陥ったアプリケーションを検出し、ユーザーにそのアプリケーションを終了するようプロンプトを表示することによって、そのアプリケーションを終了させることができます。そのアプリケーションが終了すると、アプリケーションで使用していたリソースが直ちに解放されます。新規の割り当て要求を処理する場合は、メモリがクリアされていることを最初に必ず確認し、新しい割り当てには常に未使用のメモリだけが取得され、前のデータが表示されないようにします。プライバシーは、セキュリティ全体の重要な側面です。Flash Player は、ユーザーの個人情報(名前、電子メールアドレス、電話番号など)を提供することや、他の機密情報(クレジットカード番号やアカウント情報)へのアクセスを提供することはありません。Flash Player は、原則として、標準化されたハードウェアおよびソリューション設定に関する基本情報を提供します。作成者はこの情報を使用して、使用する環境でのユーザー体験の向上を図ります。多くの場合、同じ情報は、オペレーティングシステムや Web ブラウザからも入手できます。Flex アプリケーションで入手できる、クライアント環境に関する情報には次のようなものがあります。通常は、組み込みブラウザのタイプとクライアントのオペレーティングシステムを識別します。
カメラとマイクの有無
キーボードおよびマウス入力
サンドボックスについて
サンドボックスのタイプは、SWF ファイルが使用されているセキュリティゾーンのタイプを示します。ローカル URL 以外のすべてのファイルは、リモートサンドボックスに配置されます。このようなサンドボックスは多数あり、ファイルのロード元のインターネット(またはイントラネット)ドメインごとに 1 つずつ存在します。
ローカルファイルのデフォルトのサンドボックス
このサンドボックス内の SWF ファイルは、どのような方法でもインターネット(または任意のサーバー)とは接続できません。HTTP URL などのアドレスを使用してネットワークエンドポイントにアクセスすることはできません。このサンドボックス内の SWF ファイルはネットワークを通じてのやり取りはできますが、ローカルファイルシステムから読み取ることはできません。このサンドボックスは制限されていません。ローカルファイルは、エンドユーザーによって認証されると、このサンドボックス内に置くことができます。この認証には 2 つの形式があり、設定マネージャを通じてインタラクティブに行われるか、ユーザーのコンピュータで Flash Player 設定ファイルを作成する実行可能インストーラを通じて非インタラクティブに行われます。前の例で実行する SWF ファイルは以下のとおりです。Flex アプリケーションをコンパイルするときに、そのアプリケーションが属するサンドボックスを制御できます。サンドボックスのタイプは、use-network コンパイラオプションの値(デフォルトは true)と、SWF ファイルのロード方法(クライアントによってネットワーク接続を通じてロードされるのか、ローカルファイルとしてロードされるのか)の組み合わせによって決まります。次の表に、サンドボックスのタイプを指定する方法を示します。
ロードの方法
サンドボックスのタイプ
該当なし(エラーが発生する)
ブラウザのセキュリティ
通常、このタイプのクライアントを使用するのは、アプリケーションを実行するユーザーです。アプリケーションは、アプリケーションを実行するデスクトップへのアクセス権を持つ IT 部門によってインストールされ、保守されます。インターネットへのアクセス権を持つ誰もが、この Flash Player を使用して、どこからでもアプリケーションを実行できます。埋め込みプレーヤーを使用すると、開発者は FORM および BASIC 認証や SSL などのブラウザベースのテクノロジを使用できます。ローカルファイルシステムからロードされたすべてのファイルは、local-trusted サンドボックスに配置されます。クロススクリプトは、SWF ファイルが別の SWF ファイルと直接やり取りする場合に行われます。このやり取りには、他の SWF ファイルのメソッドの呼び出しとプロパティの設定が含まれます。SWF ファイルのロードとクロススクリプトは、同じサンドボックスに常駐する SWF ファイル間で常に許可されています。異なるサンドボックスの 2 つの SWF ファイル、または異なるドメインの 2 つのリモート SWF ファイルが連携して動作する場合には制限があります。リモートサンドボックスの SWF ファイルでは、2 つの SWF ファイルが同じドメインからロードされた場合、制限なしにクロススクリプトができます。両方の SWF ファイルをネットワークからロードしたときに、ドメインが異なる場合は、これらのファイルでクロススクリプトを可能にするには、許可を与える必要があります。呼び出し対象の SWF ファイルからこれらのメソッドを呼び出し、呼び出し元の SWF ファイルのドメインを指定します。com からの SWF ファイルがメソッドをクロススクリプトできるように具体的に示して許可する必要があります。次に例を示します。SWF ファイルが異なるサンドボックスにある場合は(1 つの SWF ファイルがローカルファイルシステムからロードされ、もう 1 つがネットワークからロードされるなど)、次の規則セットに従う必要があります。リモート SWF ファイル(HTTP やその他の非ローカルプロトコルを通じて提供されるもの)は、ローカル SWF ファイルをロードできません。call() メソッドを正しく実行するためには、デフォルトで、Flex アプリケーションと、そのアプリケーションが呼び出している HTML ページが同じドメインになければなりません。通常は、このメソッドは新しいブラウザウィンドウを開くために使用しますが、スクリプトをメソッドの呼び出しに埋め込み、他の操作を実行することもできます。Flex アプリケーションは、完全にクライアント上に置かれます。ブラウザがアプリケーションをロードすると、アプリケーション SWF ファイルと、外部でロードされたイメージとその他のメディアファイルが、クライアントのブラウザのキャッシュにローカルに格納されます。これらのファイルは、クリアされるまでキャッシュに置かれます。SWF ファイルをブラウザのキャッシュに格納すると、キャッシュに格納されていない場合は表示できないユーザーがファイルを表示する可能性があります。次の表に、ブラウザのキャッシュファイルの格納場所の例を示します。
ブラウザまたはオペレーティングシステム
キャッシュの場所
これらのキャッシュファイルは、ブラウザを閉じた後もキャッシュに残されます。クライアントブラウザで SWF ファイルがキャッシュされないようにするには、Flex アプリケーションの SWF ファイルを返すラッパーの HTTP ヘッダーを、次のように設定します。
信頼できるサイトおよびディレクトリ
ブラウザのセキュリティモデルには、特定の Web サイトに適用される信頼のレベルが含まれます。Flash Player は、このモデルと対話し、ブラウザが SWF ファイルの元のサイトを信頼できるサイトと宣言したかどうかに基づいてサンドボックスを割り当てます。SWF ファイルは、ローカルのデータソースから読み取ることも、インターネットでやり取りすることもできます。SWF ファイルをローカルファイルシステムからロードするときに、SWF ファイルが local-trusted サンドボックスに格納されるように割り当てることもできます。これには、管理者がクライアントシステムへのアクセス権限を持っている必要があるので、通常は制御された環境で行われます。ユーザーは、Flash Player ユーザー設定マネージャを使用して、信頼できるディレクトリを定義することもできます。
保護されたアプリケーションの展開
アプリケーションの展開とは、ユーザーがそのアプリケーションを利用できるようにすることです。アプリケーションの展開プロセスは、アプリケーション、アプリケーションの要件、および展開環境によって異なります。いくつかの戦略を導入することで、展開するアプリケーションのセキュリティを確実に確保できます。
ローカル SWF ファイルとネットワーク SWF ファイルの展開の比較
クライアントコンピュータは、外部 Web サイトやローカルファイルシステムなどの多数のソースから個々の SWF ファイルを取得できます。SWF ファイルが Flash Player にロードされると、ファイルのロード元に基づいて、ファイルはそれぞれセキュリティサンドボックスに割り当てられます。デフォルトでは、これらのファイルは、特定の(ドメイン完全一致)サイトにあるその他のネットワークリソースに対するアクセスを許可されます。ネットワーク SWF ファイルは、明示的な Web サイトと作成者の許可により、他のドメインからの追加データにアクセスできます。ローカル SWF ファイルは、IP アドレスや修飾ドメインを含まない file:¥¥ プロトコルまたは UNC パスを使用するファイル参照として記述されます。swf はローカルファイルとは見なされません。(ユーザーまたはインストーラプログラムによって)信頼できるファイルとして登録されたローカル SWF ファイルは、local-trusted サンドボックスに配置されます。セキュリティ上の考慮事項に基づいて、local-trusted サンドボックスに対してローカル SWF ファイルを再割り当て(移動)することもできます。アプリケーションを展開する前に、プロキシサーバー、ファイアウォール、およびアセットが正しく設定されていることを確認します。Adobe では、展開チェックリストを用意しています。詳細については、展開チェックリストを参照してください。
ワイルドカードの削除
使用しているアプリケーションが別のドメインからロードされたアセットに依存し、そのドメインに crossdomain
xml ファイルがある場合は、可能であればそのファイルからワイルドカードを削除します。例えば、次を変更するとします。これを次のように変更します。開発時に、これらのメソッドにワイルドカード文字(*)を渡すこともありますが、この時点では、必要なドメインからの要求だけを許可するように制限します。展開時に、データファイルなどのアセットを、アプリケーションからはアクセス可能であるが、このデータファイルを要求するユーザーからはアクセスできないようにした方がよい場合があります。J2EE ベースのサーバーを使用している場合は、これらのデータファイルを WEB-INF ディレクトリ内部のサブディレクトリに展開できます。J2EE セキュリティの制約に基づいて、どの J2EE サーバーも、クライアント要求に対して WEB-INF ディレクトリからリソースを返すことはできません。このディレクトリにあるファイルには、サーバーサイドのコードを使用しない限りアクセスできません。
ソースコードのプリコンパイル
MXML および JSP ファイルをプリコンパイルしたら、一般公開されたサーバーからソースファイルを削除します。MXML ファイルをプリコンパイルするには、bin ディレクトリにある mxmlc コンパイラユーティリティを使用します。このユーティリティの使用の詳細については、コマンドラインコンパイラについてを参照してください。アプリケーションサーバー上の JSP ファイルのプリコンパイルに関する詳細については、該当するアプリケーションサーバーのマニュアルを参照してください。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
サイズ設定と配置について
Flex は、一連の規則に従ってコンポーネントのレイアウトを制御します。レイアウト規則は、個々のコンポーネントのサイズ設定規則と、コンテナのサイズ設定規則および配置規則を組み合せたものです。Flex では自動レイアウトをサポートしているので、多くの場合、最初にコンポーネントのサイズまたは位置を設定する必要はありません。レイアウトの制御は Flex に任せ、開発者はアプリケーションのロジックの構築に専念することができます。必要に応じて、後でインスタンスのサイズを調整できます。各コンテナには、レイアウトを制御するための独自の規則があります。例えば、VBox コンテナでは、子は 1 つの列にレイアウトされます。Grid コンテナでは、子は行および列のセルにレイアウトされます。Flex にはビルトインのデフォルトレイアウト規則がありますが、コンポーネントのプロパティとメソッドを使用してレイアウトをカスタマイズできます。すべてのコンポーネントには、height や width など、コンポーネントのサイズを絶対値またはコンテナに対する相対値で指定するための複数のプロパティがあります。各コンテナにも、レイアウト属性の設定に使用できるプロパティとスタイルがあります。コンテナ内のコンポーネントをレイアウトする際に様々な配置手法を使用することもできます。例えば、一部のコンテナでは、x 絶対座標と y 絶対座標に基づく配置をサポートしています。アプリケーションの各コンポーネントのプロパティ設定を決定します。この段階では、コンテンツがプロパティ設定に依存するコンポーネントを、Flex によってサイズと位置が決定される前に設定できます。アプリケーション内のすべてのコンポーネントのデフォルトサイズを計算します。このパスは、最も深くネストされたコンポーネントから始まり、Application コンテナに向けて進みます。計算パスでは、各コンポーネントの測定サイズ(デフォルトサイズ)が決定されます。各コンテナのデフォルトサイズは、子のデフォルトサイズまたは明示的なサイズ(指定されている場合)に基づきます。例えば、Box コンテナのデフォルトの幅は、すべての子のデフォルトの幅または明示的な幅の合計に、境界線の太さ、パディング、子同士の間隔を加えたものと等しくなります。コンポーネントの移動やサイズ変更などを行って、アプリケーションをレイアウトします。このパスは最も外側のコンテナから始まり、最も内側のコンポーネントに向けて進みます。レイアウトパスでは、各コンポーネントの実際のサイズと配置が決定されます。レイアウトパスでは、Flex は、コンポーネントのサイズ設定プロパティで親に対するパーセント値としてサイズが指定されているかどうかを判別し、その設定を使用して子コンポーネントの実際のサイズを決定します。そのため、このパスを「更新パス」と呼ぶこともあります。Flex では、位置とサイズを決定する際に次の基準系を使用します。ローカル領域とローカル座標系は、コンポーネントの外側の境界に対して相対的に表されます。コンポーネントの境界線やスクロールバーなどのビジュアルエレメントはローカル座標に含まれます。可視領域は、コンポーネントのビジュアルエレメントの内側にある領域です。つまり、この領域はコンポーネントの表示されている部分であり、子コントロール、テキスト、イメージその他のコンテンツを含めることができます。Flex には、この領域用の別の座標系はありません。コンテンツ領域とコンテンツ座標系には、ビジュアルエレメントを除くコンポーネントのすべてのコンテンツが含まれます。この領域には、現在クリッピングされており、コンポーネントをスクロールしないと表示されない領域も含まれています。例えば、スクロール可能な TextArea コントロールのコンテンツ領域には、現在画面からスクロールアウトされているテキストの領域が含まれます。Flex では、パーセント値ベースのサイズを決定するとき、および制約ベースのレイアウトを実行するときに可視領域を使用します。絶対配置を指定するときに使用する Flex コンポーネントの x プロパティと y プロパティは、コンテンツ座標系にあります。注意: Flex 座標は、基準系の左上隅を原点とします。
コンポーネントのサイズ設定について
コンポーネントの高さと幅は、計算パスとレイアウトパスで決定されます。これらのプロパティや他のプロパティを使用して、コンポーネントのサイズを制御できます。Flex では、次の方法でコントロールとコンテナのサイズを制御できます。コントロールとコンテナのサイズが自動的に決定されます。
明示的なサイズ設定
パーセント値ベースのサイズ設定
コンポーネントのサイズをコンテナのサイズに対するパーセント値で指定します。
制約ベースのレイアウト
コンポーネントの端をコンテナ内の特定の位置に固定することにより、サイズと位置を制御します。コンポーネントのサイズの制御の詳細については、コンポーネントのサイズ設定を参照してください。
コンポーネントの配置について
Flex では、アプリケーションを初期化するときにコンポーネントを配置します。また、アプリケーションまたはユーザーがビジュアルエレメントのサイズまたは位置に影響する可能性のある何らかの操作を実行した場合にも、レイアウトパスを実行し、コンポーネントを配置または再配置します。例えば、次のような場合です。
変更によってコンポーネントの計算済みの幅または高さが影響を受ける場合
例えば、Button コントロールのラベルテキストが変更された場合や、ユーザーがコンポーネントのサイズを変更した場合などです。
コンテナに子を追加するか、コンテナから子を削除した場合、子のサイズを変更した場合または子を移動した場合
例えば、アプリケーションでコンポーネントのサイズを変更できる場合、コンテナのレイアウトが更新され、子の新しいサイズに基づいて子が再配置されます。まれに、アプリケーションプログラマがコンポーネントのレイアウトを強制的に実行することが必要な場合があります。詳細については、レイアウトの手動での強制実行を参照してください。Flex は、コントロールの配置とレイアウトのための次の 2 つのメカニズムを備えています。Flex は、コンテナおよびコンポーネントに固有の一連の規則に従って、コンテナの子を自動的に配置します。自動配置は、「自動レイアウト」と呼ばれることもあります。それぞれの子の x プロパティと y プロパティを指定するか、制約ベースのレイアウトを使用します。制約ベースのレイアウトでは、コンテナの 1 つまたは複数の端と子の端、ベースラインまたは中心との距離を指定します。絶対配置は、「絶対レイアウト」と呼ばれることもあります。絶対配置は、次の 3 種類のコンテナでサポートされています。コントロールの位置の制御の詳細については、コントロールの配置とレイアウトを参照してください。
コンポーネントのレイアウトパターン
Flex では、コンテナとその子をレイアウトする際に、コンテナのタイプによってそれぞれ異なるレイアウトパターンを使用します。通常、これらのパターンは、次の表に分類されたタイプのいずれかに一致します。この表は、各タイプの一般的なレイアウト動作、コンテナのデフォルトサイズの決定方法およびパーセント値ベースの子のサイズ設定方法をまとめたものです。
コンテナのタイプ
デフォルトのレイアウト動作
一般的なレイアウト: コンテナの子が相互に影響し合うことはありません。つまり、ある子の位置がその他の子の位置に影響することはなく、子同士が重なって表示される場合があります。子の位置を明示的に指定するか、制約を使用して子の端、ベースラインまたは中心を親コンテナに対して相対的に固定します。デフォルトサイズ設定: 計算パスで下端が最も下にある子と右端が最も右にある子が特定され、それらの値を使用してコンテナのサイズが決定されます。パーセント値ベースの子: サイズ設定では、制約ベースのレイアウトと、x 座標および y 座標による配置のどちらを使用しているかによって異なる規則が使用されます。詳細については、絶対配置を使用したコンテナでのパーセント値ベースの子のサイズ設定を参照してください。一般的なレイアウト: コンテナのすべての子が 1 つの行または列に配置されます。それぞれの子の高さと幅は、他のすべての子の高さまたは幅と異なる場合があります。デフォルトサイズ設定: すべての子のデフォルトサイズまたは明示的なサイズとすべての間隔、境界線およびパディングが収まるようにコンテナのサイズが決定されます。パーセント値ベースの子: パーセント値ベースのサイズ設定を使用する子が要求するサイズが使用可能領域よりも大きい場合、要求されたパーセント値に比例するサイズの領域に収まるように実際のサイズが設定されます。一般的なレイアウト: このコンテナは、実質的には、すべてのアイテムが整列するように制約された HBox 子コントロールの行を含む VBox コントロールです。1 つの行に含まれるセルの高さはすべて同じですが、行ごとに高さを変えることができます。また、1 つの列に含まれるセルの幅はすべて同じですが、列ごとに幅を変えることができます。Grid コンテナの行または列ごとに異なる数のセルを定義することができ、個々のセルが複数の列または行にまたがってもかまいません。デフォルトサイズ設定: 個々の行および子がデフォルトサイズで収まるようにグリッドのサイズが決定されます。パーセント値ベースの子: 子がパーセント値ベースのサイズ設定を使用している場合、リニアコンテナのサイズ設定規則に従って、子 GridItem コンポーネントは行内に、GridRow コンポーネントはグリッドサイズ内にそれぞれ収められます。一般的なレイアウト: このコンテナは、同じサイズのセルがグリッド状に並んだものです。セルの順序は、行優先にも列優先にもできます。明示的なサイズまたはパーセント値ベースのサイズを指定しない場合、必要に応じて、より多くのアイテムを含む方向を決定する direction プロパティが使用され、コントロールの行数と列数は可能な限り同数に近づきます。デフォルトサイズ設定: tileWidth プロパティと tileHeight プロパティを指定しない場合、コンテナでは最大の子セルの測定サイズまたは明示的なサイズが各子セルのサイズに使用されます。パーセント値ベースの子: 子コンポーネントのパーセント値ベースのサイズは、Tile コンテナに対するパーセント値ではなく、個々のセルに対するパーセント値を指定します。一般的なレイアウト: このコンテナは、子を 1 つずつ表示します。デフォルトサイズ設定: コンテナのサイズは、最初に選択された子の測定サイズまたは明示的なサイズによって決定されます。その後、残りのすべての子にその初期サイズが適用されます。resizeToChild プロパティを true に設定すると、それぞれの子が表示されたときに、その子の測定サイズまたは明示的なサイズに合わせてコンテナのサイズが変更されます。パーセント値ベースの子: 原則として、高さと幅の両方に 100 %を指定するか、パーセント値ベースのサイズ設定を使用しないようにします。前者の場合、子がナビゲータの範囲全体を満たします。
基本的なレイアウト規則と注意事項
Flex では、次の基本規則に従ってレイアウトを実行します。これらの規則を覚えておくと、Flex でのレイアウトの詳細を理解しやすくなり、アプリケーションがそのようにレイアウトされた理由や、アプリケーションの外観を変更する方法を判断する上で役立ちます。Flex でのコンポーネントのサイズ設定方法の詳細については、コンポーネントのサイズの決定と制御を参照してください。コンポーネントの配置の詳細については、コントロールの配置とレイアウトを参照してください。Flex では、まず、すべてのコンポーネントの測定(デフォルト)サイズまたは明示的に設定されたサイズを決定します。このサイズは、最も内側の子コントロールから順に決定され、最後に最も外側のコントロール(Application コントロール)のサイズが決定されます。これは、計算パスで実行されます。計算パスが終了すると、次にパーセント値ベースのすべてのサイズを決定し、コンポーネントをレイアウトします。レイアウトは、最も外側のコンテナから開始され、最後に最も内側のコントロールがレイアウトされます。これは、レイアウトパスで実行されます。開発者がピクセル値に設定したサイズは強制的に適用される固定サイズであり、コンポーネントに対して設定した最大サイズまたは最小サイズの指定よりも優先されます。計算パスで決定されたデフォルトサイズは、明示的なサイズまたはパーセント値ベースのサイズが設定されていない(または制約ベースのレイアウトを使用する)コンポーネントのサイズを指定するものであり、このサイズは固定されます。パーセント値ベースのサイズ指定は、おおよその基準となるものです。レイアウトアルゴリズムは可能であればこの要求を満たし、パーセント値を使用して比例サイズを決定しますが、実際のサイズが要求されたサイズよりも小さくなる場合があります。パーセント値ベースのサイズは常にコンポーネントの最大サイズと最小サイズの範囲内にあり、それらの範囲の制約を受けます。パーセント値ベースのサイズを使用した場合、コンテナの子がコンテナのサイズを超えることはありません。
レイアウトの手動での強制実行
プログラムによってコンポーネントを再度レイアウトすることが必要になる場合があります。通常、Flex は、大量の計算を必要とするプロパティをスクリプトによって設定するときに、そのスクリプトの実行が終了するまでそれらのプロパティの処理を遅延します。例えば、width プロパティを設定すると、オブジェクトの子またはその親の幅の再計算が必要となることがあるので、このプロパティの設定は遅延されます。処理を遅延することにより、スクリプトで width プロパティが複数回設定された場合に、その処理を何度も繰り返すのを防ぐことができます。ただし、スクリプトが完了する前に、レイアウトを強制的に実行することが必要になる場合もあります。レイアウトを強制的に実行する必要がある状況として、次のような場合が考えられます。
エフェクトを再生する前に、ターゲットで開始値が設定された場合
プロパティを変更した後にビットマップデータをキャプチャする場合
レイアウトを強制的に実行するには、レイアウトする必要のあるコンポーネントの validateNow() メソッドを呼び出します。このメソッドを呼び出すと、オブジェクトとそのすべての子のプロパティ、サイズおよびレイアウトが検証および更新され、必要に応じて再描画されます。このメソッドは計算負荷が高いので、必要な場合にのみ呼び出すように注意してください。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
ステートフルスキンの作成
ステートフルスキンは、ビューステートを使用して、コンポーネントの様々な状態に対するスキンを指定します。ビューステートの詳細については、ビューステートの使用を参照してください。『Adobe Flex リファレンスガイド』の説明に従って、スキンプロパティでステートフルスキンをサポートするかどうかを指定できます。ステートフルスキンとして機能するには、スキンは IStateClient インターフェイスを実装している必要があります。次に、ステートフルスキンクラスをコンポーネントのステートフルスキンプロパティに割り当てます。例えば、Button コントロールには 8 つの状態と 8 つの関連付けられたスキンがあります。8 つのすべての状態に対するスキンを定義する単一のスキンクラスを作成するには、UIComponent コンポーネントに基づくスキンを作成します。その後、各ビューステートの名前が Button コントロールの状態に対応するスキン内に 8 つのビューステートを定義します。次に例を示します。このセクションの例では、少ないコード行でビューステートを定義できるので MXML を使用します。ステートフルスキンを定義したら、そのスキンをコントロールの skin スタイルプロパティに割り当てます。次に CSS を使用してステートフルスキンを設定する例を示します。前の例で実行する SWF ファイルは以下のとおりです。詳細については、スキンの適用を参照してください。8 つのすべてのスキンを定義する必要はありません。作成したいスキンのみ定義します。その他すべてのスキンについては、Flex に付属のデフォルトスキンを使用します。次のステートフルスキンコンポーネントでは、Button コントロールの up 状態と over 状態のスキンのみ定義します。その後、このコンポーネントをスキンスタイルプロパティの値として指定するか、残りの 6 つのプロパティのデフォルトスキンを指定します。次に例を示します。前の例で実行する SWF ファイルは以下のとおりです。
例:ステートフルスキンの作成
ステートフルスキンはプログラムスキンなので、プログラムスキンのレシピで定義されたルールを使用して定義する必要があります。ビューステートを作成するには、基本ビューステートを定義してから、この基本ビューステートを変更する一連の変更またはオーバーライドを定義して、個々の新しいビューステートを定義します。新しいビューステートでは、子コンポーネントの追加または削除、スタイル値やプロパティの値の設定、状態固有のイベントリスナーの定義などによって、基本ビューステートを変更できます。ステートフルスキンを定義する最も一般的な方法の 1 つは、ビューステートごとに変更できる複数のプロパティまたはスタイルを持つスキンを定義する方法です。例えば、次のステートフルスキンでは、Button コントロールで使用するスキンの線の太さ、塗りの色、およびドロップシャドウを制御するプロパティを定義します。この例では、次の状態のスキンを定義します。変更を一切定義しないでください。この結果、基本ビューステートが up 状態のスキンを定義します。塗りの色を 0x00CC33 に変更し、線の太さを 2 ピクセルに設定し、2 ピクセル幅のドロップシャドウを作成します。塗りの色を 0x00CC33 に変更し、ドロップシャドウのタイプを内側に設定し、2 ピクセル幅のドロップシャドウを作成します。次のアプリケーションでは、このスキンを使用しています。前の例で実行する SWF ファイルは以下のとおりです。
イメージを使用するステートフルスキンの作成
状態を変更するとスキンが異なるイメージを表示するステートフルスキンでイメージを使用できます。イメージを使用する場合の課題の 1 つは、最初にスキンを作成するときに、measuredWidth および measuredHeight プロパティの値を設定するか、そうでない場合はスキンの高さと幅が 0 に設定されるようにして、基本ビューステートにイメージを組み込む必要があることです。この例では、スキンは次のアクションを実行します。基本ビューステートの変更を定義せずに up ビューステートを作成します。notBase ビューステートを定義して、基本ビューステートによって定義されたイメージを削除します。up ビューステートを除く、その他すべてのビューステートは notBase ビューステートに基づきます。このプロパティは、最初のビューステートの変更時ではなく、アプリケーションの起動時に子インスタンスを作成するように指定します。この結果、最初にビューステートを表示する際のちらつきを防止します。詳細については、ビューステートの使用を参照してください。この設定により、スキンのサイズが親のサイズになるように Image コントロールが構成されます。
ステートフルスキンでのトランジションの使用
ビューステートを使用すると、通常はユーザーの操作に対する応答として、コンポーネントの外観を変更できます。トランジションは、ビューステートの変化が画面上でどのように表示されるかを定義します。トランジションは、エフェクトクラスを使用して定義します。このとき、トランジションを処理するために明示的に設計された複数のエフェクトを組み合わせます。トランジションの詳細については、トランジションの使用を参照してください。次の例では、前のセクションのステートフルスキンの定義にトランジションを追加します。この例では、トランジションは、スキンの塗りの色を変更する際に表示される 100 ミリ秒のアニメーションを定義します。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
テーマについて
テーマは、Flex アプリケーションの外観と操作性を定義します。テーマには、アプリケーションのカラースキーマや共通フォントなどの単純なものから、アプリケーションで使用されるすべてのコンポーネントの完全な再スキンのような複雑なものまで定義できます。テーマは、通常は SWC ファイルの形式をとります。ただし、テーマを CSS ファイルにすることや、SWF ファイルのシンボルのような埋め込みグラフィカルリソースとすることも可能です。テーマ SWC ファイルもスタイル SWF ファイルにコンパイルし、実行時にロードすることができます。詳細については、実行時スタイルシートとしてのテーマ SWC ファイルの使用を参照してください。デフォルトのテーマである Halo は、SWC ファイルに含まれるグラフィカルスキンとプログラムスキンを組み合わせたものです。css ファイルによって定義されます。swc ファイルでは、Flex コンポーネントのプロパティが数多く設定されています。
場合によっては、mx
halo パッケージのクラスが使用されることもあります。Flex には、実際のアプリケーションに適用できる事前定義のテーマがいくつか用意されています。詳細については、付属のテーマファイルについてを参照してください。SWC ファイルの内容を Flex アプリケーションに適用するには、テーマの使用の手順に従います。独自にテーマを作成するには、テーマ SWC ファイルの作成の手順に従います。テーマを新規に作成しなくても、Flex アプリケーションのテーマを編集できます。詳細については、テーマの作成を参照してください。
テーマの使用
テーマは通常テーマ SWC ファイルの形をとります。これらの SWC ファイルには、スタイルシートやスキニングアセットが含まれています。プログラムスキンや、SWF ファイル、GIF ファイル、JPEG ファイルのようなグラフィカルアセットは、テーマの SWC ファイルの中でアセットとして使用します。単独の CSS ファイルのみでテーマを構成することもできます。テーマを、緩い結合で結び付けた各種ファイルの集合とせず、SWC ファイルとしてパッケージ化すると、次の利点が得られます。SWC ファイルなので、配布が容易です。SWC ファイルは、再コンパイルしない限り、改変してアプリケーションに適用し直すことができません。SWC ファイルはプリコンパイルされています。そのため、SWC ファイルに含まれていないスキンクラスのコンパイル時間と比べて、アプリケーションのコンパイル時間が短くなります。xml ファイルのオプションを使用してアプリケーションをコンパイルする場合は、次のようにテーマを指定します。テーマのリストに SWC ファイルを追加すると、コンパイラによって、その SWC ファイルに収められているクラスがアプリケーションの library-path に追加されます。さらに、その SWC ファイルにある CSS ファイルがアプリケーションに適用されます。しかし、この逆の操作は機能しません。詳細については、Flex コンパイラの使用を参照してください。アプリケーションに適用するテーマとして、複数のテーマファイルを指定できます。両方のファイルに重複するスタイルがなければ、それぞれのファイルにあるテーマがすべて適用されます。ただし、テーマファイルの適用順序は重要です。複数のテーマファイルにある同じスタイルプロパティを指定すると、リストの最後にあるテーマが使用されます。css ファイルにあるスタイルプロパティが優先されますが、先頭の 2 つのファイルにのみ存在するプロパティはそのまま適用されます。
付属のテーマファイルについて
Flex には、変更せずにそのまま使用できるテーマがいくつか付属しています。これらのテーマについて次の表で説明します。swf ファイルが収められています。これは、デフォルトの Halo テーマをグラフィカルにしたものです。このファイルにあるグラフィカルアセットを変更するには、Flash IDE を使用します。Flex のテーマで使用する SWF ファイルは必ずエクスポートしておく必要があります。アプリケーションをグラフィカルに再スキンするときは、このテーマから着手します。このテーマをそのまま使用すると作業が効率的になることもありますが、実行時スタイルを適用する機能のうち、利用できないものがあります。halo パッケージにある各種クラスを使用します。デフォルトのテーマアセットの詳細については、デフォルトのスタイルシートについてを参照してください。Flex の旧バージョンの外観と操作性を提供します。swc ファイルで構成されます。このファイルには、グラフィカルアセットを提供する CSS ファイルと SWF ファイルが収められています。css ファイルが収められています。テーマ SWC ファイルを構築するには、CSS ファイルを作成し、そのファイル、グラフィカルアセット、およびプログラムアセットを SWC ファイルに追加します。css ファイルをカスタマイズして新しいテーマを作成することをお勧めします。以降のセクションでは、これらの手順を詳しく説明します。
テーマのスタイルシートの作成
テーマは、スタイルシートと、そのスタイルシートで使用するアセットで構成されることが普通です。これらのアセットは、グラフィックファイルまたはプログラムスキンクラスです。テーマの CSS ファイルにグラフィックファイルを追加するには、Embed ステートメントを使用します。次の例では、Button クラスに新しいグラフィカルスキンを定義します。Embed キーワードに指定する名前は、SWC ファイルをコンパイルするときにスキンアセットに使用する名前と同じにします。テーマの CSS ファイルにプログラムスキンクラスを追加するには、次の例に示すように、ClassReference ステートメントを使用して目的のクラス名(ファイル名ではありません)を指定します。前の例では、すべてのスキンが単一のプログラムスキンクラスファイルで定義されていました。詳細については、プログラムスキンの作成を参照してください。CSS ファイルには、任意の数のクラスセレクタおよびタイプセレクタを指定できます。テーマのスタイル定義でスキンを使用する必要はありません。次の例に示すように、スタイルシートの中でスタイルプロパティを設定するだけですみます。css ファイルから取得したものです。このファイルを使用してテーマの設計に着手することをお勧めします。css の詳細については、デフォルトのスタイルシートについてを参照してください。
テーマ SWC ファイルのコンパイル
テーマ SWC ファイルのコンパイルに使用するコマンドを簡素化するには、設定ファイルを使用します。詳細については、設定ファイルを使用したテーマ SWC ファイルのコンパイルを参照してください。name は、アセットを CSS ファイルで参照する場合と同じように参照するために使用する名前です。path は、アセットへのファイルシステムパスです。jpg アセットを追加します。テーマ SWC ファイルに追加するリソースとして、CSS ファイルも指定します。
CSS ファイルの名前を指定するときは、css 拡張子も含めて記述します。拡張子を記述しないと、目的のファイルがスタイルシートとして認識されないので、アプリケーションに適用されません。コンポーネントコンパイラを使用して、スタイルシートやグラフィカルスキンなどのテーマのアセットを SWC ファイルにコンパイルします。次の例では、compc コマンドラインコンパイラを使用してテーマをコンパイルします。include-file オプションにリストの形式で複数のアセットを渡すことはできません。ほとんどのテーマでは、多くのスキンファイルやスタイルシートが使用されます。それが原因で、コンパイルするたびに負荷が大きくなることがあります。この処理を簡素化するには、load-config オプションを使用し、設定オプションを含むファイルを指定します。詳細については、設定ファイルを使用したテーマ SWC ファイルのコンパイルを参照してください。クラスファイル名ではなく、クラス名を渡します。SWC ファイルをコンパイルするときは、このクラスがソースパスに存在している必要があります。次のコマンドラインの例では、CSS ファイルと単一のプログラムスキンクラスを持つテーマ SWC ファイルをコンパイルします。次の例に示すように、各クラスを空白で区切って記述します。スキンクラスの作成の詳細については、スキンの作成を参照してください。
設定ファイルを使用したテーマ SWC ファイルのコンパイル
設定ファイルを使用すると、一般的にコマンドライン上でオプションを渡すより冗長になりますが、その一方で、コンポーネントコンパイラオプションの読み取りと保守は簡単になります。例えば、設定ファイル内でコマンドラインを次のエントリに置き換えることができます。コンポーネントコンパイラの使用の詳細については、Flex コンパイラの使用を参照してください。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
コンポーネントビューを使用すると、MXML エディタのデザインモードで Flex コンポーネントを MXML ファイルにすばやく挿入できます。エフェクト、フォーマッタ、バリデータなどの不可視のコンポーネントは、コンポーネントビューには一覧表示されません。これらのコンポーネントはコードで挿入する必要があります。コンポーネントビューには、「カスタム」と呼ばれるコンポーネントのカテゴリがあります。このカテゴリのコンポーネントを表示するには、Flex Builder でファイルを開く必要があります。このカテゴリには、現在アクティブなドキュメントを含むプロジェクトで使用可能なカスタムコンポーネントの一覧が表示されます。アクティブなドキュメントがないか、アクティブなドキュメントがプロジェクトにない場合、「カスタム」カテゴリは空となります。コンポーネントビューには、可視のカスタムコンポーネント(UIComponent クラスから継承したコンポーネント)の一覧のみが表示されます。「カスタム」カテゴリには、現在のプロジェクトまたは現在のプロジェクトのソースパスに保存したカスタムコンポーネントのすべての一覧が表示されます。mxml という名前のコンポーネントファイルを作成して、プロジェクトに保存した場合、コンポーネントビューの「カスタム」カテゴリに LoginBox コンポーネントが表示されます。すべてのコンポーネントと同様に、これらのコンポーネントもコンポーネントビューからドラッグするとレイアウトに挿入できます。コンポーネントビューには、「コントロール」と呼ばれるコンポーネントのカテゴリがあります。次の表に、このカテゴリのコンポーネントの概要を示します。可変サイズのボタンを表示するコントロールです。ラベルやアイコンイメージを追加できます。特定のブール値が true(チェックがオンの状態)であるか、false(チェックがオフの状態)であるかを示すコントロールです。パレットから色を選択できるコントロールです。一連の値を保持するテキストフィールドに関連付けられたドロップダウンリストを表示するデータプロバイダコントロールです。データを表形式で表示するデータプロバイダコントロールです。日付を選択できる、1 か月単位のカレンダーを表示するコントロールです。日付を表示するコントロールです。右側にカレンダーアイコンが表示されます。このコントロール内の任意の場所をクリックすると、DateChooser コントロールの 1 か月単位のカレンダーがポップアップ表示されます。アイテムの一覧を水平方向に並べて表示するデータプロバイダコントロールです。スライダを水平方向に移動することで値を選択できるコントロールです。単一行のフィールドラベルを表示するコントロールです。編集することはできません。シンプルなハイパーリンクを表示するコントロールです。スクロール可能な一連の選択肢を表示するデータプロバイダコントロールです。基になる変数の値を増減させるための 2 つのボタンが一体となったコントロールを表示するコントロールです。水平方向に並んだ 2 つのボタン(メインボタン、およびアイコンのみのポップアップボタンと呼ばれる小さなボタン)から構成されるコントロールです。水平方向に並んだ 2 つのボタン(メインボタン、およびクリック時にメニューが表示される小さなボタン)から構成されるコントロールです。現在の操作に要する残り時間を視覚的に表示するコントロールです。選択または選択解除できるコントロールです。関連付けられている複数の RadioButton コントロールを相互排他的にするコントロールです。テキストを編集し、ボールドやイタリックなどの単純なスタイルを適用できるコントロールです。指定された SWF ファイルのコンテンツを表示するコントロールです。複数行のテキストフィールドを表示するコントロールです。編集することはできません。ユーザー入力用の編集可能なテキストフィールドを表示するコントロールです。複数の行を入力することもできます。ユーザー入力用の編集可能なテキストフィールドを表示するコントロールです。単一行のみ入力できます。英数字データを保持することもできますが、入力データは String データ型として解釈されます。アイテムの一覧をタイル状に並べて表示するデータプロバイダコントロールです。アイテムは垂直方向の列または水平方向の行の向きで順に配置されます。階層データを展開可能なツリー形式で表示できるデータプロバイダコントロールです。Flex アプリケーションで FLV ファイルを再生できるコントロールです。スライダを垂直方向に移動することで値を選択できるコントロールです。コンポーネントビューには、「レイアウト」と呼ばれるコンポーネントのカテゴリがあります。次の表に、このカテゴリのコンポーネントの概要を示します。アプリケーションの最上部にドッキング状態で表示されるか、アプリケーション内でドッキング解除の状態で表示される可能性があるコントロールバーです。子の位置とサイズを明示的に設定できるコンテナです。MXML アプリケーションファイルの作成時に自動的に挿入されます。Panel コンテナ内の他の子コンテナによって共有されたコンポーネントを保持するコンテナです。子を標準のフォーム形式で配置するコンテナです。Panel コンテナでのみ使用する必要があります。FormItem コンテナのグループにオプションのラベルを指定するコントロールです。HTML テーブルのように、子をセルの行や列として配置するコンテナです。子を単一の水平行にレイアウトするコンテナです。子を水平方向にレイアウトするコンテナです。水平方向の罫線を 1 本表示するコントロールです。通常、コンテナ内に境界線を作成するために使用されます。タイトルバー、キャプション、境界線、およびその子を表示するコンテナです。アプリケーションレイアウト全体の構築時に基本的な構築ブロックとして使用されます。コンテナ内のコンポーネントとコンポーネントの間隔を制御できる不可視のコントロールです。複数の行または列に子を配置するコンテナです。タイトルバー、キャプション、境界線、閉じるボタン、およびその子を保持するモーダルウィンドウを表示するコンテナです。移動およびサイズ変更が可能です。子を単一の垂直列にレイアウトするコンテナです。子を垂直方向にレイアウトするコンテナです。垂直方向の罫線を 1 本表示するコントロールです。通常、コンテナ内に境界線を作成するために使用されます。コンポーネントビューには、「ナビゲータ」と呼ばれるコンポーネントのカテゴリがあります。次の表に、このカテゴリのコンポーネントの概要を示します。一連の子パネルの情報を体系化するナビゲータコンテナです。いずれかのパネルが常にアクティブになります。一連のリンク先が指定された複数の Button コントロールの列を定義するナビゲータコンテナです。一連のリンク先が指定された複数の Link コントロールの列を定義するナビゲータコンテナです。Menu コントロール の 1 つまたは複数のサブメニューを含む水平メニューバーを表示するコンテナです。複数のタブを定義して水平方向に配置するナビゲータコンテナです。様々なコンテンツ領域を切り替えるためのタブの付いたコンテナを表示するナビゲータコンテナです。重ね合わされたパネルを定義するナビゲータコンテナです。一度に表示されるパネルは 1 つだけです。コンポーネントビューには、「チャート」と呼ばれるコンポーネントのカテゴリがあります。次の表に、このカテゴリのコンポーネントの概要を示します。AreaChart は、データ値をつなぐ線で囲まれた面としてデータを表します。BarChart は、それぞれの長さがデータ値によって決まる一連の横棒でデータを表します。つまり、x 軸の値、y 軸の値およびバブルのサイズの値です。ColumnChart は、それぞれのサイズがデータ値によって決まる一連の縦棒でデータを表します。HLOCChart は、データ系列の高値、安値、始値、終値などの財務データを一連の線で示します。Legend コントロール(凡例)は、チャート上の塗りパターンを、それらの塗りで示されるデータ系列について説明するラベルに一致させます。データによって各断片のサイズが決まります。データのシェイプは、円レンダラーなどの表示レンダラーを使用して決定します。Flex プロパティビューを使用すると、MXML エディタのデザインモードで、ビジュアルコンポーネントのプロパティをすばやく設定できます。このビューはソースモードでは使用できません。Flex プロパティビューを使用しても、エフェクト、フォーマッタ、バリデータなどの不可視のコンポーネントのプロパティを設定することはできません。これらのコンポーネントのプロパティは、コードで設定する必要があります。Flex プロパティのツールバーには、次のボタンがあります。標準ビュー 最もよく使用するプロパティがフォームレイアウトで表示されます。カテゴリビュー プロパティがカテゴリ別リストで表示されます。アルファベット順ビュー プロパティがアルファベット順リストで表示されます。デフォルトのプロパティ値または CSS 規則で設定された値を使用する場合は、このフィールドを空白のままにしてください。Flex ナビゲータビューでは、ワークスペース内に含まれるプロジェクトとリソースを管理できます。ステートビューには、Flex Builder の現在のアプリケーションに定義されているステートが表示されます。ステートの一覧がツリー構造で表示され、どのステートが他のどのステートに基づいているかがわかります。ビューには次のオプションがあります。ツリー構造 MXML エディタのデザインモードで表示して編集できるステートを選択できます。ツリー内のステートを選択すると、デザインモードでステートのレイアウトが表示されます。新規ステート ステートを作成できます。詳細については、実行とデバッグの環境設定を参照してください。ステートプロパティの編集 選択したステートの基本的なプロパティを編集できます。ツリー内のステートをダブルクリックしても、プロパティを編集できます。詳細については、ステートプロパティの編集ダイアログボックスを参照してください。ステートの削除 選択したステートを削除できます。他のステートの基となっているステートを削除しようとすると、他のステートも削除されることを警告するダイアログボックスが表示されます。この操作をキャンセルするか、ステートの削除を承認できます。編集/元に戻すを選択すると、削除したステートが復元します。新規ステートダイアログボックスでは、新しいステートを定義できます。このダイアログボックスは次のオプションで構成されています。名前 新規ステートの名前を指定できます。ベース 新規ステートの基となるステートを選択できます。ポップアップメニューには、現在のドキュメントで定義されているステートの一覧が示されます。開始ステートとして設定 アプリケーションの起動時に該当するステートを表示できます。ステートプロパティの編集ダイアログボックスでは、名前やアプリケーションの起動時に表示されるかどうかなど、既存のステートのプロパティを変更できます。次のオプションがあります。名前 ステートの新しい名前を指定できます。ベースステートの名前を変更することはできません。開始ステートとして設定 アプリケーションの起動時に該当するステートを表示または非表示にできます。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
エディタとビューの操作
ワークベンチ内のほとんどのパースペクティブは、1 つのエディタと複数のビューから構成されています。エディタとは、通常リソースの編集や参照に使用されるワークベンチ内の視覚的なコンポーネントです。ビューもまた、エディタをサポートし、エディタ内の選択したアイテムの代替プレゼンテーションを提供するワークベンチ内の視覚的なコンポーネントで、ワークベンチ内の情報をナビゲーションできます。エディタとビューの概要については、ワークベンチについてを参照してください。
ビューのオープン
パースペクティブには、ビューとエディタの定義済みの組み合わせが含まれています。現在のパースペクティブに含まれていないビューを開くこともできます。ビューを現在のパースペクティブに追加した後、そのビューをパースペクティブの一部として保存する場合があります。詳細については、パースペクティブのカスタマイズを参照してください。頻繁に使用するビューにすばやくアクセスするために、高速ビューを作成することもできます。詳細については、高速ビューの作成と操作を参照してください。
ビューの移動とドッキング
ビューをワークベンチ内の別の場所に移動し、必要に応じてドッキングまたはドッキング解除できます。ビューのタイトルバーをドラッグして、ビューを目的の場所に移動します。ビューをワークベンチ内で移動すると、ポインタの形状がドロップカーソルに変わります。ドロップカーソルは、マウスボタンを離したときにビューがドッキングされる場所を示します。積み重ねられたビューのグループをドラッグするには、空いている領域からビュータブの右側にドラッグします。ビューのコンテキストメニューを使用しても、ビューを移動できます。次に、マウスボタンを再度クリックします。(オプション)変更を保存するには、ウィンドウ/パースペクティブ/パースペクティブの別名保管を選択します。
タブ付きビューの再配置
ビューをワークベンチ内の別の場所にドッキングできるだけでなく、タブ付きビューのグループでビューの順序を再配置できます。移動するビューのタブをクリックして、ビューを目的の場所にドラッグしてから、マウスボタンを離します。ビューを他のビュータブを超えてドラッグすると、スタックシンボルが表示されます。
ビューの切り替え
別のビューで作業するために、ビューを切り替えることができます。切り替え先のビューのタブをクリックします。
高速ビューの作成と操作
高速ビューとは、すばやく開閉できる非表示のビューです。他のビューと同様に動作しますが、操作中にワークベンチの領域を占有しません。ショートカットバーの高速ビューアイコンをクリックすると、ビューが開きます。高速ビューの外側の任意の場所をクリックするか、高速ビューツールバーの「最小化」をクリックすると、再びビューが非表示になります。注意: Flex ナビゲータビューを高速ビューに切り替えて、Flex ナビゲータ高速ビューからファイルを開くと、高速ビューが自動的に非表示になり、そのファイルを操作できるようになります。
高速ビューの作成
高速ビューに切り替えるビューを、ワークベンチウィンドウの左下隅にあるショートカットバーまでドラッグします。ドラッグしたビューのアイコンがショートカットバーに表示されます。ショートカットバーのこのアイコンをクリックすると、ビューを開くことができます。ビューの外側をクリックすると、すぐにまたこのビューが非表示になります。
高速ビューからノーマルビューへの変更
ビューのタブを右クリック(Macintosh では Ctrl キーを押しながらクリック)して、ビューのコンテキストメニューを開きます。高速ビューの選択を解除します。
タスクビューと問題ビューのフィルタリング
タスクビューまたは問題ビューに表示されるタスクや問題は、フィルタリングできます。例えば、ワークベンチに記録されている問題、またはメモとして記録したタスクのみ表示する必要がある場合があります。アイテムのフィルタリングは、そのアイテムが関連付けられているリソースまたはリソースのグループに応じて、「説明」フィールドのテキストストリング、問題の重大度、タスクの優先度またはタスクステータスによって行うことができます。タスクビューまたは問題ビューのタスクバーで、「フィルタ」をクリックします。フィルタダイアログボックスに必要事項を入力して、「OK」をクリックします。
ワーキングセットの作成
ワークスペースに複数のプロジェクトが含まれている場合は、ワーキングセットを作成して、選択したプロジェクトをグループ化できます。その後で、Flex ナビゲータビューおよびタスクビューで別のワーキングセットを表示し、ワークスペース内のすべてのアイテムを検索することなくワーキングセットを検索することもできます。
ワーキングセットの作成
Flex ナビゲータビューでツールバーメニューを開き、「ワーキングセットの選択」を選択します。「新規」を選択します。リソースタイプを選択して「次へ」をクリックします。ワーキングセット名を入力し、ワーキングセットを含める、ワークスペース内のプロジェクトを選択します。「終了」をクリックします。ワーキングセットがすぐに Flex ナビゲータビューに適用され、セットに含まれるプロジェクトとリソースだけが表示されます。
ワークスペース内のすべてのプロジェクトの表示
Flex ナビゲータビューでツールバーメニューを開き、「ワーキング・セットの選択解除」を選択します。
編集するファイルのオープン
ファイルを開くと、エディタが起動されてそのファイルを編集できるようになります。次のいずれかの操作をします。いずれかのナビゲータビューでファイルを右クリック(Macintosh では Ctrl キーを押しながらクリック)して、コンテキストメニューから「開く」を選択します。いずれかのナビゲータビューでファイルをダブルクリックします。ブックマークビューでファイルに関連付けられているブックマークをダブルクリックします。問題ビューでファイルに関連付けられているエラー警告またはタスクレコードをダブルクリックします。この操作で、該当するファイルのタイプに合ったデフォルトのエディタによりファイルが開かれます。ファイルを別のエディタで開くには、ファイルを右クリック(Macintosh では Ctrl キーを押しながらクリック)し、コンテキストメニューから「アプリケーションから開く」を選択します。次に、使用するエディタを選択します。
エディタとファイルタイプとの関連付け
エディタをワークベンチ内の各種ファイルタイプに関連付けることができます。ウィンドウ/設定を選択します。「+」ボタンをクリックして「一般」カテゴリを展開します。「+」ボタンをクリックして「エディタ」カテゴリを展開し、「ファイルの関連付け」を選択します。「ファイル・タイプ」リストからファイルタイプを選択します。ファイルタイプをリストに追加するには、「追加」をクリックして、新規ファイル・タイプダイアログボックスに新しいファイルタイプを入力し、「OK」をクリックします。「関連付けられたエディター」リストで、該当するファイルタイプに関連付けるエディタを選択します。内部エディタまたは外部エディタをリストに追加するには、「追加」をクリックして、ダイアログボックスに必要事項を入力します。デフォルトエディタの環境設定をオーバーライドするには、いずれかのナビゲータビューで任意のリソースを右クリック(Macintosh では Control キーを押しながらクリック)し、コンテキストメニューから「アプリケーションから開く」を選択します。
ワークベンチ外のファイルの編集
ワークベンチ外でファイルに行った変更を処理するために、ワークベンチによって必要な構築または更新操作が実行されます。ファイルを保存して閉じます。ワークベンチのいずれかのナビゲータビューで、編集したファイルを右クリック(Macintosh では Ctrl キーを押しながらクリック)し、コンテキストメニューから「更新」を選択します。外部エディタで定期的に作業する場合、自動更新を有効にすることもできます。自動更新を有効にするには、ウィンドウ/設定を選択し、「一般」カテゴリを展開します。次に、「ワークスペース」を選択して、「自動で更新」をチェックします。このオプションを有効にすると、ワークベンチによって外部の変更内容がファイルに記録されます。この処理速度は、プラットフォームによって異なります。
エディタのタイリング
ワークベンチを使用すると、複数のエディタで複数のファイルを開くことができます。ただし、ビューとは異なり、エディタをワークベンチ外にドラッグして、新しいウィンドウを作成することはできません。しかし、エディタ領域でエディタを並べることができるため、ソースファイルを水平方向に並べて表示できます。エディタ領域で複数のファイルを開きます。いずれかのエディタタブを選択します。エディタをエディタ領域の上下左右のいずれかの境界までドラッグします。ポインタがドロップカーソルに変わり、マウスボタンを離したときにエディタが表示される場所を示します。(オプション)各エディタのエディタ領域の境界をドラッグして、必要に応じてエディタのサイズを変更します。
ビューまたはエディタの最大化
ビューまたはエディタを一時的に最大化して、ワークベンチウィンドウ全体に表示させることができます。
ビューまたはエディタの最大化
ビューまたはエディタの前の位置とサイズの復元
タイトルバーをダブルクリックするか、右上隅の「最大化」または「復元」アイコンをクリックして、ビューまたはエディタを最大化または復元することもできます。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
ナビゲータコンテナの追加
ナビゲータコンテナでは、ユーザーインターフェイスを関連ビューのグループに整理できます。例えば、これらのコンテナを使用して、タブ付きユーザーインターフェイスを作成できます。これらのコンテナには、ビュー間をユーザーが移動できるメカニズムが組み込まれています。注意: Flex ビューステートを使用したマルチビューインターフェイスを作成することもできます。詳細については、ビューステートとトランジションの追加を参照してください。Flex Builder を使用して、ナビゲータコンテナをアプリケーションに挿入し、コンテナの各ビューのレイアウトを作成できます。
ナビゲータコンテナでのレイアウトの作成
ナビゲータコンテナをアプリケーションに挿入すると、Flex Builder を使用して、コンテナの各ビューのレイアウトを作成できます。ビューはナビゲータコンテナの子コンテナとなります。代わりに、これらのコンテナでは、ViewStack コンテナのアクティブな子コンテナをユーザーが制御できます。子コンテナをナビゲータコンテナに追加またはナビゲータコンテナから削除するには、コンテナの上部を展開します。ViewStack コンテナの場合、子コンテナを選択するには、コンテナの上部に表示される左矢印または右矢印をクリックします。これらの矢印を使用すると、コンテナ内の子コンテナを順次切り替えることができます。アウトラインビュー(ウィンドウ/アウトライン)でビューを選択することもできます。プロパティビューで子コンテナのプロパティを設定するには、子コンテナの背景をクリックします。コントロールまたはコンテナを子コンテナに挿入して、レイアウトを作成します。ViewStack コンテナを使用している場合、子コンテナをユーザーが選択できるメカニズムを追加します。ユーザーによる ViewStack コンテナ内でのビューの選択を可能にする。ViewStack コンテナは、積み重ねられた一連の子コンテナから構成されます。子コンテナは一度に 1 つのみ表示されるか、アクティブになります。ViewStack コンテナには、子コンテナをユーザーが選択できるメカニズムは組み込まれていません。LinkBar コンテナは、次の例に示すように、一連のリンク先を指定する Link コントロールの水平行を定義します。TabBar コンテナは、次の例に示すように、タブの水平行を定義します。代わりに、ナビゲータのプラス(+)ボタンをクリックして、表示されるダイアログボックスで「ViewStack ID」を選択することもできます。ViewStack コンテナとナビゲータ間の関連付けが行われた場合、デザインモードでナビゲータのボタンやタブをクリックすると、ViewStack コンテナ内の対応するビューが選択されます。このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。
コメントの追加
Array クラスを使用すると、配列にアクセスして操作することができます。配列インデックスは 0 から始まります。つまり、配列内の最初のエレメントは [0]、2 番目のエレメントは [1](以下同様)になります。さらに、配列アクセス ([]) 演算子を使用すると、配列の初期化または配列のエレメントへのアクセスを行うことができます。配列エレメントには、数値、ストリング、オブジェクトを含む各種データ型、さらに他の配列も保存できます。インデックス付き配列を作成し、その各エレメントに異なるインデックス配列を割り当てれば、多次元配列を作成できます。このような配列は、テーブル内のデータの表現に使用できるので、多次元であると考えられます。配列は希薄な配列です。つまり、インデックス 0 に 1 つのエレメント、インデックス 5 に別のエレメントが存在しても、この 2 つのエレメントの間のインデックス位置にはエレメントが存在しない場合があります。このような場合、1 から 4 までの位置のエレメントは未定義となります。これはエレメントが存在しないことを示しており、必ずしも値 undefined を持つエレメントが存在するわけではありません。配列では、値による代入ではなく、参照による代入が行われます。ある配列変数に別の配列変数を代入すると、両方とも同じ配列を参照するようになります。結合配列(ハッシュとも呼ばれる)の作成には Array クラスを使用しないでください。結合配列は、数値エレメントではなく名前付きエレメントを含むデータ構造です。結合配列の作成には、Object クラスを使用してください。Array クラスを拡張してメソッドをオーバーライドまたは追加することができます。そうしない場合、配列にデータを保管する機能が失われます。継承されるパブリックプロパティを隠す。
継承されるパブリックプロパティを表示
指定されたオブジェクトインスタンスのクラスオブジェクトまたはコンストラクタ関数への参照です。配列内のエレメント数を示す負でない整数です。[静的] クラスまたは関数オブジェクトのプロトタイプオブジェクトへの参照です。継承されるパブリックメソッドを隠す。
継承されるパブリックメソッドを表示
指定された数のエレメントを持つ配列を作成することができます。指定されたエレメントを持つ配列を作成することができます。パラメータで指定されたエレメントを配列内のエレメントと連結して、新しい配列を作成します。指定された関数について false を返すアイテムに達するまで、配列内の各アイテムにテスト関数を実行します。配列内の各アイテムについてテスト関数を実行し、指定された関数について true を返すすべてのアイテムを含む新しい配列を作成します。配列内の各アイテムについて関数を実行します。オブジェクトに指定されたプロパティが定義されているかどうかを示します。厳密な等価(===)を使用して配列内のアイテムを検索し、アイテムのインデックス位置を返します。Object クラスのインスタンスが、パラメータとして指定されたオブジェクトのプロトタイプチェーン内にあるかどうかを示します。配列内のエレメントをストリングに変換し、指定されたセパレータをエレメント間に挿入し、エレメントを連結して、その結果をストリングとして返します。配列内のアイテムを、最後のアイテムから先頭に向かって検索し、厳密な等価(===)を使用して、一致したアイテムのインデックス位置を返します。配列内の各アイテムについて関数を実行し、元の配列の各アイテムに対する関数の結果に対応するアイテムから成る新しい配列を作成します。配列の最後のエレメントを削除して、そのエレメントの値を返します。指定されたプロパティが存在し、列挙できるかどうかを示します。エレメントを配列の最後に追加して、追加後の配列の長さを返します。配列の並びを反転させます。ループ処理に対するダイナミックプロパティの可用性を設定します。配列の最初のエレメントを削除して、そのエレメントを返します。元の配列から一連のエレメントを取り出して、新しい配列を返します。元の配列は変更されません。true を返すアイテムに達するまで、配列内の各アイテムにテスト関数を実行します。配列内のエレメントをソートします。配列内のフィールド(複数のフィールドも可能)に基づいて、配列内のエレメントをソートします。配列のエレメントを追加および削除します。指定された配列内のエレメントを表すストリングを返します。エレメントを配列の先頭に追加して、配列の新しい長さを返します。指定されたオブジェクトのプリミティブな値を返します。[静的] Array クラスのソートメソッドに対して、大文字と小文字を区別しないソートを指定します。[静的] Array クラスのソートメソッドに対して、降順でのソートを指定します。[静的] Array クラスのソートメソッドに対して、文字ストリングではなく数値によるソートを指定します。[静的] ソート結果として、配列インデックスで構成される配列を返すことを指定します。[静的] Array クラスのソートメソッドに対して、一意性ソート要件を指定します。
プロパティの詳細
配列内のエレメント数を示す負でない整数です。このプロパティは、新しいエレメントが配列に追加されると自動更新されます。メモ : length プロパティに既存の長さよりも短い値を割り当てた場合、配列は切り詰められます。
コンストラクタの詳細
指定された数のエレメントを持つ配列を作成することができます。パラメータを指定しない場合は、0 個のエレメントを持つ配列が作成されます。エレメント数を指定する場合は、numElements 個のエレメントを持つ配列が作成されます。メモ : このクラスは、2 つのコンストラクタメソッド項目を示しています。コンストラクタはさまざまなタイプの引数を受け入れるためです。コンストラクタの動作は、各項目で詳細を示すように、渡される引数の型と数によって異なります。0 はメソッドまたはコンストラクタのオーバーロードをサポートしていません。指定されたエレメントを持つ配列を作成することができます。任意の型の値を指定することができます。配列内の最初のエレメントのインデックスまたは位置は、常に 0 です。メモ : このクラスは、2 つのコンストラクタ項目を示しています。コンストラクタはさまざまなタイプの引数を受け入れるためです。コンストラクタの動作は、各項目で詳細を示すように、渡される引数の型と数によって異なります。0 はメソッドまたはコンストラクタのオーバーロードをサポートしていません。values — 複数の任意の値で構成されるカンマ区切りリストです。メモ : Array コンストラクタに数値パラメータを 1 つだけ渡した場合、そのパラメータは配列の length プロパティを指定するものと見なされます。
メソッドの詳細
パラメータで指定されたエレメントを配列内のエレメントと連結して、新しい配列を作成します。パラメータで配列を指定すると、その配列のエレメントが連結されます。args — 新しい配列内で連結する任意のデータ型(数値、エレメント、ストリングなど)の値です。値を渡さない場合、新しい配列は元の配列の複製になります。Array — この配列のエレメントの後にパラメータのエレメントが続く配列です。指定された関数について false を返すアイテムに達するまで、配列内の各アイテムにテスト関数を実行します。このメソッドを使用して、配列内のすべてのアイテムがある基準(値が特定の数値より小さいなど)を満たしているかどうかを判別できます。この関数には、単純な比較(item < 20 など)やより複雑な演算を含めることができます。また、この関数は、次のように、アイテムの値、アイテムのインデックス、および Array オブジェクトの 3 つの引数を使用して呼び出されます。
true を返します(指定された関数について配列内のすべてのアイテムが true を返す場合)
次の例では、2 つの配列をテストして、各配列内のすべてのアイテムが数値であるかどうかを判別します。また、テストの結果を出力します。配列内の各アイテムについてテスト関数を実行し、指定された関数について true を返すすべてのアイテムを含む新しい配列を作成します。false を返すアイテムは、新しい配列に含められません。この関数には、単純な比較(item < 20 など)やより複雑な演算を含めることができます。また、この関数は、次のように、アイテムの値、アイテムのインデックス、および Array オブジェクトの 3 つの引数を使用して呼び出されます。次の例では、管理者であるすべての従業員の配列を作成しています。配列内の各アイテムについて関数を実行します。この関数には、単純なコマンド (trace() ステートメントなど) やより複雑な演算を含めることができます。また、この関数は、次のように、アイテムの値、アイテムのインデックス、および Array オブジェクトの 3 つの引数を使用して呼び出されます。厳密な等価 (===) を使用して配列内のアイテムを検索し、アイテムのインデックス位置を返します。int — 配列内のアイテムの 0 から始まるインデックス位置です。次の例では、指定された配列の位置を表示しています。配列内のエレメントをストリングに変換し、指定されたセパレータをエレメント間に挿入し、エレメントを連結して、その結果をストリングとして返します。ネストされた配列は、join() メソッドに渡されるセパレータで区切るのではなく、常にカンマ (,) で区切ります。このパラメータを省略すると、デフォルトのセパレータとしてカンマが使用されます。String — ストリングに変換された配列のエレメントで構成され、指定されたパラメータで区切られているストリングです。このストリングは、電話番号の数字の桁(888675309)のみが残されたものです。+ などの他の文字を specialChars に追加することもできるので、このルーチンは国際電話番号の形式にも対応します。配列内のアイテムを、最後のアイテムから先頭に向かって検索し、厳密な等価 (===) を使用して、一致したアイテムのインデックス位置を返します。デフォルトは、インデックスに許可されている最大値です。fromIndex を指定しない場合、配列内の最後のアイテムから検索が開始されます。int — 配列内のアイテムの 0 から始まるインデックス位置です。次の例では、指定された配列の位置を表示しています。配列内の各アイテムについて関数を実行し、元の配列の各アイテムに対する関数の結果に対応するアイテムから成る新しい配列を作成します。この関数には、単純なコマンド(ストリングの配列の大文字小文字の変更など)やより複雑な演算を含めることができます。また、この関数は、次のように、アイテムの値、アイテムのインデックス、および Array オブジェクトの 3 つの引数を使用して呼び出されます。Array — 元の配列内の各アイテムの関数の結果が含まれる新しい配列です。次の例では、配列内のすべてのアイテムを大文字に変更しています。配列の最後のエレメントを削除して、そのエレメントの値を返します。* — 指定した配列の最後のエレメント(任意のデータ型)の値です。エレメントを配列の最後に追加して、追加後の配列の長さを返します。このオブジェクトには、エレメント a が最初から設定されています。配列の並びを反転させます。配列の最初のエレメントを削除して、そのエレメントを返します。残りの配列エレメントは、元の位置 i から i-1 に移動されます。* — 配列内の最初のエレメント(任意のデータ型)です。元の配列から一連のエレメントを取り出して、新しい配列を返します。元の配列は変更されません。パラメータを何も渡さないと、元の配列の複製が作成されます。つまり、-1 が最後のエレメントです。このパラメータを省略すると、スライスには配列の最初から最後までのすべてのエレメントが取り込まれます。つまり、-1 が最後のエレメントです。Array — 元の配列から取り出した一連のエレメントから成る配列です。その結果、作成される配列には b と c が設定されます。その結果、作成される配列には e と f が設定されます。true を返すアイテムに達するまで、配列内の各アイテムにテスト関数を実行します。このメソッドを使用して、配列内のいずれのアイテムもある基準(値が特定の数値より小さいなど)を満たしているかどうかを判別できます。この関数には、単純な比較(item < 20 など)やより複雑な演算を含めることができます。また、この関数は、次のように、アイテムの値、アイテムのインデックス、および Array オブジェクトの 3 つの引数を使用して呼び出されます。
true を返します(指定された関数について配列内のいずれかのアイテムが true を返す場合)
次の例では、未定義の値を表示しています。配列内のエレメントをソートします。このメソッドは、Unicode 値に基づいてソートを実行します。ソートでは大文字と小文字が区別されます。昇順にソートされます。配列はソート順を反映するように変更されます。同じソートフィールドを持つ複数のエレメントは、ソート済みの配列の中で連続的かつランダムに格納されます。データ型に関係なく、すべてのエレメントがストリングとしてソートされます。args パラメータ記述)に記述されているソートオプションのいずれかを使用するか、またはソート処理を行う独自のカスタム関数を作成できます。args — 比較関数を指定する引数と、ソート動作を決定する値です。この引数はオプションです。比較関数には、比較を行うために 2 つの引数が必要です。負の戻り値は、A、B のソート順を指定します。0 の戻り値は、A と B が並ぶソート順を指定します。正の戻り値は、B、A のソート順を指定します。複数指定する場合は、ビット単位の論理和 (OR)| 演算子で区切ります。この引数はオプションです。Array — 戻り値は、次に示すように、渡された引数によって異なります。args パラメータの引数)に指定すると、ソート対象のエレメントに同じソートフィールドを持つものが複数ある場合、値 0 が返されます。配列は変更されません。args パラメータの引数)に指定した場合、ソート結果を反映したインデックスの数値配列が返されます。配列は変更されません。それ以外の場合、値は返されません。ソート順を反映するように配列が変更されます。次に、sort() メソッドを使用して配列をソートします。メソッドの呼び出しにはパラメータを使用しません。最初に、sort() メソッドをパラメータなしで呼び出して配列をソートします。44] のように設定されます。sort() メソッドを使用してこの配列をソートします。このカスタム関数は、アルファベット順ではなく価格に基づいてソートを行います。メモ:sort() 関数のデフォルトの動作では、各エンティティがストリングとして処理されます。これは、単にソートアルゴリズムに数値を認識させるだけです。配列内のフィールド(複数のフィールドも可能)に基づいて、配列内のエレメントをソートします。配列は、次に示す特性を備えている必要があります。インデックス付き配列を対象とします。結合配列は対象外です。配列の各エレメントは、プロパティがあるオブジェクトを保持するものとします。すべてのオブジェクトには共通のプロパティが少なくとも 1 つあるものとします。このようなプロパティをフィールドといいます。fieldName パラメータを複数指定する場合、先頭のフィールドが第 1 ソートフィールド、2 番目のフィールドが第 2 ソートフィールド、(以下同様)と見なされます。)fieldName パラメータで指定されたフィールドが、比較対象のいずれのエレメントにも含まれていない場合、そのフィールドは undefined に設定されていると見なされます。エレメントはソート済みの配列に連続的かつランダムに格納されます。ソートでは大文字と小文字が区別されます。昇順にソートされます。配列はソート順を反映するように変更されます。同じソートフィールドを持つ複数のエレメントは、ソート済みの配列の中で連続的かつランダムに格納されます。数値フィールドは、ストリングとしてソートされます。このパラメータを使用すると、デフォルトのソート動作をオーバーライドすることができます。
単純な配列(例えば、1 つのフィールドだけを持つ配列)をソートする場合、または options パラメータでサポートされていないソート順序を指定する場合、Array
複数のフラグを渡すには、ビット単位の論理和 (OR)(|) 演算子で区切ります。Flash Player 8 では、複数のフィールドでソートを行う場合に、各フィールドに対して異なるソートオプションを指定する機能が追加されました。各ソートオプションは fieldName パラメータのソートフィールドに対応します。次の例では、第 1 ソートフィールド a を降順で、第 2 ソートフィールド b を数値ソートで、第 3 ソートフィールド c を大文字と小文字を区別しないでソートします。そうでない場合、これらのオプションは無視されます。Array — 戻り値は、パラメータを渡したかどうかによって異なります。配列は変更されません。これ以外の場合、何も返されず、ソート順を反映するよう配列が変更されます。44] のように設定されます。3 つの for ループを使用して配列エレメントを出力します。1 番目の for ループでは、エレメントが追加された順に出力されます。3 番目の for ループでは、異なる出力が作成されます。次に、配列を次のようにソートします。次に、for ループを使用して配列を出力します。配列のエレメントを追加および削除します。