Gestión de eventos

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"); 
}