Cada componente difunde eventos cuando el usuario interactúa con él. Cuando el usuario hace clic en un componente Button, por ejemplo, distribuye un evento
MouseEvent.CLICK
; cuando el usuario selecciona un elemento en un componente List, éste distribuye un evento Event.
CHANGE
. También se puede producir un evento cuando le sucede algo significativo a un componente, por ejemplo, cuando termina de cargarse el contenido de una instancia de UILoader y se genera un evento
Event.COMPLETE.
Para gestionar un evento, escriba código ActionScript que se ejecute cuando se produzca el evento.
Los eventos de un componente incluyen los eventos de cualquier clase de la que hereda el componente. Esto implica que todos los componentes de interfaz de usuario ActionScript 3.0 heredan eventos de la clase UIComponent, ya que ésta constituye la clase base de dichos componentes. Para consultar una lista con los eventos que emite un componente, consulte la sección Eventos de la entrada de la clase del componente en la
Referencia de ActionScript 3.0
para Flash Professional
.
Para obtener una explicación exhaustiva de la gestión de eventos en ActionScript 3.0, consulte
Programación con ActionScript 3.0
.
Detectores de eventos
Los siguientes puntos clave se aplican a la gestión de eventos de componentes ActionScript 3.0:
-
Todos los eventos se difunden a través de una instancia de una clase de componente. La instancia del componente es el
difusor
.
-
Un
detector
de eventos se registra llamando al método
addEventListener()
de la instancia del componente. Por ejemplo, la línea de código siguiente añade un detector para el evento
MouseEvent.CLICK
a la instancia de Button
aButton
:
aButton.addEventListener(MouseEvent.CLICK, clickHandler);
El segundo parámetro del método
addEventListener()
registra el nombre de la función,
clickHandler
, que se llamará cuando se produzca el evento. Esta función también se conoce como
función
callback
.
-
Se pueden registrar varios detectores en una instancia de componente.
aButton.addEventListener(MouseEvent.CLICK, clickHandler1);
aButton.addEventListener(MouseEvent.CLICK, clickHandler2);
-
Se puede registrar un detector en varias instancias de componente.
aButton.addEventListener(MouseEvent.CLICK, clickHandler1);
bButton.addEventListener(MouseEvent.CLICK, clickHandler1);
-
La función de gestión de eventos se pasa a un objeto de evento que contiene información sobre el tipo de evento y la instancia que difunden el evento. Para obtener más información, consulte
Objeto de evento
.
-
El detector se mantiene activo hasta que termine la aplicación, o bien hasta que se elimine explícitamente con el método
removeEventListener()
. Por ejemplo, la línea de código siguiente elimina el detector para el evento
MouseEvent.CLICK
en
aButton
:
aButton.removeEventListener(MouseEvent.CLICK, clickHandler);
Objeto de evento
El objeto de evento hereda de la clase de objeto Event y tiene propiedades que contienen información sobre el evento que se ha producido, incluidas las propiedades
target
y
type
, que proporcionan información esencial sobre el evento:
Propiedad
|
Descripción
|
type
|
Cadena que indica el tipo de evento.
|
target
|
Referencia a la instancia del componente que difunde el evento.
|
Si un evento tiene más propiedades, aparecen en la descripción de la clase del evento en la
Referencia de ActionScript 3.0
para Flash Professional
.
El objeto de evento se genera automáticamente y se pasa a la función de gestión de eventos cuando se produce un evento.
El objeto de evento se puede utilizar dentro de la función para acceder al nombre del evento que se difundió o al nombre de instancia del componente que difundió el evento. A partir del nombre de la instancia, puede acceder a otras propiedades de componente. Por ejemplo, el código siguiente utiliza la propiedad
target
del objeto de evento
evtObj
para acceder a la propiedad
label
de
aButton
y mostrarla en el panel Salida:
import fl.controls.Button;
import flash.events.MouseEvent;
var aButton:Button = new Button();
aButton.label = "Submit";
addChild(aButton);
aButton.addEventListener(MouseEvent.CLICK, clickHandler);
function clickHandler(evtObj:MouseEvent){
trace("The " + evtObj.target.label + " button was clicked");
}
|
|
|