Etkileşim modelini InteractiveObject sınıfından miras alan görüntüleme nesneleri olay dinleyici kullanarak klavye olaylarına yanıt verebilir. Mesela Sahne alanına klavye girişini dinleyecek ve yanıt verecek bir olay dinleyici yerleştirebilirsiniz. Aşağıdaki kodda bir olay dinleyici basılan bir tuşu yakalar ve tuş adı ile tuş kod özellikleri görüntülenir:
function reportKeyDown(event:KeyboardEvent):void
{
trace("Key Pressed: " + String.fromCharCode(event.charCode) + " (character code: " + event.charCode + ")");
}
stage.addEventListener(KeyboardEvent.KEY_DOWN, reportKeyDown);
Ctrl tuşu gibi bazı tuşlar herhangi bir glif temsil etmiyor olsa da olay oluştururlar.
Bir önceki kod örneğinde, klavye olay dinleyicisi Sahne alanının tümü için klavye girişi yakalamıştı. Ayrıca Sahne alanı üzerindeki belirli bir görüntüleme nesnesi için bir olay dinleyicisi yazabilirsiniz; bu olay dinleyicisi nesne odaklı olduğunda tetiklenir.
Aşağıdaki örnekte tuş vuruşları sadece kullanıcı TextField örneği içerisine yazdığı zaman Çıktı paneline yansıtılmaktadır. Shift tuşu basılı tutulduğunda TextField öğesinin kenarlık rengi geçici olarak kırmızıya dönüşür.
Bu kod Sahne alanında
tf
adlı bir TextField örneği olduğunu varsayar.
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 sınıfı ayrıca bir kullanıcı metin girdiğinde dinleyebileceğiniz bir
textInput
olayı rapor eder. Daha fazla bilgi için
Metin girdisi yakalama
bölümünü inceleyin.
Not:
AIR çalışma zamanında, bir klavye olayı iptal edilebilir. Flash Player çalışma zamanında, bir klavye olayı iptal edilemez.
Tuş kodları ve karakter kodları
Basılan tuşu belirlemek ve diğer eylemleri tetiklemek için bir klavye olayının
keyCode
ve
charCode
özelliklerine erişebilirsiniz.
keyCode
özelliği klavyedeki bir tuşun değerine karşılık gelen sayısal değerdir.
charCode
özelliği ise o tuşun geçerli karakter kümesi içindeki sayısal değeridir. (Varsayılan karakter kümesi ASCII destekleyen UTF-8'dir.)
Tuş kodu ve karakter değeri arasındaki temel fark bir tuş kodu değerinin klavye üzerindeki belirli bir tuşu temsil etmesi (sayısal tuş takımındaki 1 harf tuşlarının üst sırasındaki 1'den farklıdır ancak "1"i çıkaran tuş ve "!" çıkaran tuş aynıdır) ve karakter değerinin belirli bir karakteri temsil etmesidir. (R ve r karakterleri birbirinden farklıdır.)
Tuşlar ve tuş kodları arasındaki eşlemeler cihaza ve işletim sistemine bağlıdır. Bu nedenle eylemleri tetiklemek için tuş eşlemeleri kullanmamanız gerekir. Onun yerine uygun
keyCode
özelliklerine başvurmak için Keyboard sınıfı tarafından sağlanan önceden tanımlı sabit değerleri kullanmanız gerekir. Örneğin, Shift tuşu için tuş eşleme kullanmak yerine
Keyboard.SHIFT
sabitini kullanın (yukarıdaki kod örneğinde gösterildiği gibi).
KeyboardEvent önceliği
Diğer olaylarda olduğu gibi klavye olay sırası kod içindeki
addEventListener()
yöntemlerinin atanma sırasına göre değil görüntüleme nesnesi hiyerarşisine göre belirlenir.
Aşağıdaki örnekte olduğu gibi
container
adlı bir film klibinin içerisine
tf
adlı bir metin alanı yerleştirdiğinizi ve her iki örneğe bir klavye olayı için bir olay dinleyicisi eklediğinizi düşünün:
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 + ")");
}
Hem metin alanında hem de üst kabında bir dinleyici olduğundan TextField içerisindeki her tuş vuruşu için
reportKeyDown()
işlevi iki kez çağrılır. Her basılan tuş için
container
film klibinden önce metin alanının bir olay gönderdiğine dikkat edin.
İşletim sistemi ve web tarayıcı klavye olaylarını Adobe Flash Player ve AIR uygulamalarından önce işleyecektir. Örneğin, Microsoft Internet Explorer uygulamasında Ctrl+W tuş bileşimi herhangi bir SWF dosyası bir klavye olayı göndermeden tarayıcı penceresini kapatacaktır.