InteractiveObject クラスから操作モデルを継承する表示オブジェクトは、イベントリスナーを使用してキーボードイベントに応答できます。 例えば、ステージにイベントリスナーを配置してキーボード入力を監視し、それに応答できます。 次のコードでは、イベントリスナーでキーの押し下げをキャプチャして、キー名とキーコードのプロパティが表示されます。
function reportKeyDown(event:KeyboardEvent):void
{
trace("Key Pressed: " + String.fromCharCode(event.charCode) + " (character code: " + event.charCode + ")");
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
Ctrl キーなどの一部のキーには字形表現がありませんが、キーを押すとイベントが生成されます。
上記のコード例では、キーボードイベントリスナーがステージ全体のキーボード入力をキャプチャします。 ステージ上の特定の表示オブジェクトに対してイベントリスナーを記述することもできます。このイベントリスナーは、オブジェクトにフォーカスがあるとトリガーされます。
次の例では、ユーザーが TextField インスタンス内に入力した場合のみ、キーストロークが出力パネルに表示されます。 Shift キーを押したままにすると、TextField の境界線の色が一時的に赤に変わります。
このコードは、ステージ上に
tf
という名前の TextField インスタンスがあることを前提としています。
tf.border = true;
tf.type = "input";
tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown);
tf.addEventListener(KeyboardEvent.KEY_UP,reportKeyUp);
function reportKeyDown(event:KeyboardEvent):void
{
trace("Key Pressed: " + String.fromCharCode(event.charCode) + " (key code: " + event.keyCode + " character code: " + event.charCode + ")");
if (event.keyCode == Keyboard.SHIFT) tf.borderColor = 0xFF0000;
}
function reportKeyUp(event:KeyboardEvent):void
{
trace("Key Released: " + String.fromCharCode(event.charCode) + " (key code: " + event.keyCode + " character code: " + event.charCode + ")");
if (event.keyCode == Keyboard.SHIFT)
{
tf.borderColor = 0x000000;
}
}
TextField クラスは、ユーザーがテキストを入力したときに監視できる
textInput
イベントも報告します。詳しくは、
テキスト入力のキャプチャ
を参照してください。
注意:
AIR の実行時に、キーボードイベントはキャンセルできます。Flash Player の実行時に、キーボードイベントはキャンセルできません。
KeyboardEvent の優先度
他のイベントの場合と同様、キーボードイベントシーケンスは、コードで
addEventListener()
メソッドが割り当てられた順番ではなく、表示オブジェクト階層によって決定されます。
例えば、次の例に示すように、
tf
というテキストフィールドを
container
というムービークリップ内に配置し、キーボードイベント用のイベントリスナーを両方のインスタンスに追加すると仮定します。
container.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown);
container.tf.border = true;
container.tf.type = "input";
container.tf.addEventListener(KeyboardEvent.KEY_DOWN,reportKeyDown);
function reportKeyDown(event:KeyboardEvent):void
{
trace(event.currentTarget.name + " hears key press: " + String.fromCharCode(event.charCode) + " (key code: " + event.keyCode + " character code: " + event.charCode + ")");
}
テキストフィールドとその親コンテナの両方にリスナーがあるため、
reportKeyDown()
関数は TextField 内でのキーストロークごとに 2 回呼び出されます。キーが押されるたびに、テキストフィールドの方が
container
ムービークリップより先にイベントを送出します。
オペレーティングシステムや Web ブラウザーは、Adobe Flash Player または AIR より先にキーボードイベントを処理します。例えば、Microsoft Internet Explorer では、Ctrl + W を押すと、表示されている SWF ファイルがキーボードイベントを送出する前に、ブラウザーウィンドウが閉じます。