Los Beans utilizan el mecanismo de eventos implementado en el JDK 1.1, por eso implementar eventos en los Beans es igual que implementar eventos en cualquier componente del JDK 1.1. Esta secci�n describe como se utiliza este mecanismo de eventos en los Beans y en el BeanBox.
�C�mo descubre el BeanBox las capacidades de Eventos de un Beans
El BeanBox utiliza la introspecci�n de patrones de dise�o o una clase BeanInfo para descubir los eventos que puede disparar un Bean.
�Utilizar la Introspecci�n para Descubrir los Eventos Lanzados por un Bean
Los JavaBeans proporcionan patrones de dise�o orientados a eventos para dar a las herramientas de introspecci�n la posibilidad de descubir los eventos que puede lanzar un Bean.
Para que un Bean sea la fuente de un evento, debe implementar m�todos que a�adan y eliminen oyentes para el tipo del objeto. Los patrones de dise�o para esos m�todos son
public void add<EventListenerType>(<EventListenerType> a) public void remove<EventListenerType>(<EventListenerType> a)
Estos m�todos le permiten a un Bean fuente saber donde lanzar los eventos. Entonces el Bean fuente lanza los eventos a aquellos Beans oyentes que utilicen los m�todos para aquellos interfaces particulares. Por ejemplo, si un Bean fuente registra objetos ActionListener, lanzar� eventos a dichos objetos llamando al m�todo actionPerformed() de dichos oyentes.
Para ver los eventos descubiertos utilizando patrones de dise�o, arrastra un ejemplar de OurButton dentro del BeanBox y despliega el men� Edit|Events. Esto muestra una lista de interface de eventos que OurButton puede disparar. Observa que el propio OurButton s�lo a�ade dos de esos interfaces; el resto son heredados de la clase base.
�Utilizar BeanInfo para Definir los Eventos Lanzados por el Bean
Se pueden "publicar" expl�citamente los eventos lanzados por un Bean, utilizando una clase que implementa el interface BeanInfo. El Bean ExplicitButton subclasifica OurButton, y proporciona una clase ExplicitButtonBeanInfo asociada. ExplicitButtonBeanInfo implementa el siguiente m�todo para definir expl�citamente los interfaces que ExplicitButton utiliza para lanzar eventos.
public EventSetDescriptor[] getEventSetDescriptors() {
try {
EventSetDescriptor push = new EventSetDescriptor(beanClass,
"actionPerformed",
java.awt.event.ActionListener.class,
"actionPerformed");
EventSetDescriptor changed = new EventSetDescriptor(beanClass,
"propertyChange",
java.beans.PropertyChangeListener.class,
"propertyChange");
push.setDisplayName("button push");
changed.setDisplayName("bound property change");
EventSetDescriptor[] rv = { push, changed};
return rv;
} catch (IntrospectionException e) {
throw new Error(e.toString());
}
}
Arrastra un ejemplar de ExplicitButton al BeanBox, y despliega el men� Edit|Events. Observa que s�lo se listan aquellos interfaces expuestos expl�citamente en la clase ExplicitButtonBeanInfo. No se exponen las capacidades heredadas. Puedes ver la p�gina El Interface BeanInfo para m�s informaci�n sobre este interface.
�Ver los Eventos de un Bean en el BeanBox
Si has seleccionado un Bean OurButton en el BeanBox, despliega el men� Edit|Events, ver�s una lista de interfaces a los que OurButton puede lanzar eventos. Cuando se selecciona alg�n interface, se muestran los m�todos que lanzan diferentes eventos a dichos interfaces. Estos corresponden a todos los eventos que OurButton puede lanzar.
�Capturando Eventos en el BeanBox
En este ejemplo utilizaremos dos ejemplares del Bean OurButton para arrancar y parar un ejemplar del Bean Juggler animado. Etiquetaremos esto botones como "start" y "stop"; haremos que cuando se pulse el bot�n "start" se llame al m�todo startJuggling del Bean Juggler; y que cuando se pulse el bot�n "stop", se llame al m�todo stopJuggling del Bean Juggler.
- Arranca el BeanBox.
- Arrastra un Bean Juggler y dos ejemplares de OurButton en el BeanBox.
- Selecciona un ejemplar de OurButton. En la hoja de propiedades, cambia la etiqueta a "start".
- Selecciona el segundo ejemplar de OurButton y cambia su etiqueta a "stop".
- Seleciona el bot�n start. elige el men� Edit|Events|action|actionPerformed. Esto hace que aparezca una linea marcada entre el bot�n start y el cursor. Pulsar sobre el ejemplar de Juggler. Esto trae el EventTargetDialog.

Esta lista contiene los m�todos de Juggler que no toman argumentos, o argumentos del tipo actionPerformed.
- Selecciona el m�todo startJuggling y pulsa OK. Ver�s un mensaje indicando que el BeanBox est� generando una clase adaptador.
- repite los dos �ltimos pasos sobre el bot�n stop, excepto en elegir el m�todo stopJuggling en el EventTargetDialog.
Si pulsas ahora sobre los botones start y stop se arrancar� y parar� la ejecuci�n de Juggler. Aqu� tienes una descripci�n general de lo que ha sucedido.
- Los botones start y stop son fuentes de eventos. Las fuentes de eventos lanzan eventos a los destinos de eventos. En este ejemplo el Bean Juggler es el Destino del Evento.
- Cuando se selecciona el bot�n start y se elige un m�todo de evento (mediante el men� Edit|Event), se est� eligiendo el tipo de evento que lanzar� la fuente del evento.
- cuando se conecta la l�nea con otro Bean, est�s seleccionando el Bean Destino del evento.
- El EventTargetDialog lista los m�todos que pueden aceptar ese tipo de eventos o que no tomen par�metros. Cuando se elige un m�todo en el EventTargetDialog, se est� eligiendo el m�todo que recibir� el evento lanzado, y actuar� sobre �l.
Utiliza el men� File|Save par� grabar este ejemplo en un fichero de tu elecci�n.
�Clases Adaptadoras de Eventos
El BeanBox genera una clase adpatador que se interpone entre la fuente y el destino del evento. La clase adaptador implementa el interface del oyente de evento apropiado (como el oyente real), captura el evento lanzado por el bot�n, y llama al m�todo seleccionado del bean destino. Aqu� tienes la clase adpatador generada por el BeanBox que se interpone entre el bot�n start y el JugglerBean.
// Automatically generated event hookup file.
package tmp.sunw.beanbox;
import sunw.demo.juggler.Juggler;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class ___Hookup_1474c0159e implements
java.awt.event.ActionListener, java.io.Serializable {
public void setTarget(sunw.demo.juggler.Juggler t) {
target = t;
}
public void actionPerformed(java.awt.event.ActionEvent arg0) {
target.startJuggling(arg0);
}
private sunw.demo.juggler.Juggler target;
}
El adaptador implementa el interface ActionListener que se ha seleccionado en el men� Edit|Events del BeanBox. ActionListener declare un m�todo, actionPerformed(), que es implementado por el adaptador para llamar al m�todo del Bean destino (startJuggling()) que se ha seleccionado. El m�todo setTarget() del adaptador es llamado por el BeanBox para seleccionar el Bean destino real, en este caso Juggler.
�El Bean EventMonitor
El Bean EventMonitor (beans/demo/sunw/demo/encapsulatedEvents) imprime informes de los eventos del Bean fuente, en un listbox. Para ver como funciona esto, sigue estos pasos.
- Arrastra ejemplares de OurButton y EventMonitor hasta el BeanBox. Podr�as redimensionar el EventMonitor (y el BeanBox) para acomodar la visi�n de los informes de eventos.
- Selecciona el ejemplar de OurButton, y elige cualquier m�todo en el men� Edit|Events.
- Conecta la l�nea que aparece con el EventMonitor, y elige su initiateEventSourcMonitoring en el EventTargetDialog.
- Selecciona el Bean OurButton. Estar�s viendo un informe de eventos en el EventMonitor
Cuando el primer evento es enviado, EventMonitor analiza el Bean fuente para descubrir todos los eventos que lanza, crea y registra oyentes de eventos para cada tipo de evento, y luego informa siempre que se lance un evento. Esto es �til para depuraci�n, Intenta conectar otros Beans a EventMonitor para observar sus eventos.
�Eventos para Propiedades Compartidas y Restringidas
Las p�ginas sobre propiedades Compartidas y Restringidas describen dos interfaces de oyentes de eventos espec�ficos.