顯示物件如果從 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 + ")");
}
因為文字欄位及其父容器上都有一個偵聽程式,所以每次在 TextField 中按下按鍵時,就會呼叫兩次
reportKeyDown()
函數。請注意,每次按下一個按鍵,文字欄位就會在
container
影片片段傳送事件之前,先傳送一個事件。
作業系統以及網頁瀏覽器會搶先在 Adobe Flash Player 或 AIR 之前處理鍵盤事件。例如,使用 Microsoft Internet Explorer 時,請在任何包含物件的 SWF 檔傳送鍵盤事件時,先按下 Ctrl+W 鍵,關閉瀏覽器視窗。