Swing y JFC (Java Foundation Classes)

Cada vez que el usuario teclea un caracter o pulsa un bot�n del rat�n, ocurre un evento. Cualquier puede ser notificado del evento. Todo lo que tiene que hacer es implementar el interface apropiado y ser registrado como un oyente de evento del evento fuente apropiado. Los componentes Swing puede generar muchas clases de evento. Aqu� hay unos pocos ejemplos.

Acci�n que resulta en el evento Tipo de oyente
El usuario pulsa un bot�n, presiona Return mientras teclea en un campo de texto, o elige un �tem de men�. ActionListener
El usuario elige un frame (ventana principal). WindowListener
El usuario pulsa un bot�n del rat�n mientras el cursor est� sobre un componente. MouseListener
El usuario mueve el cursor sobre un componente. MouseMotionListener
El componente se hace visible. ComponentListener
El componente obtiene obtiene el foco del teclado. FocusListener
Cambia la tabla o la selecci�n de una lista. ListSelectionListener

Cada evento est� representado por un objeto que ofrece informaci�n sobre el evento e identifica la fuente. Las fuentes de los eventos normalmente son componentes, pero otros tipos de objetos tambi�n pueden ser fuente de eventos. Como muestra la siguiente figura, cada fuente de evento puede tener varios oyentes registrados. Inversamente, un s�lo oyente puede registrarse con varias fuentes de eventos.

event       event object     /----> event listener
source ---------------------------> event listener
                             \----> event listener

Descripci�n: M�ltiples oyentes pueden ser registrados para ser 
notificados de eventos de un tipo particular sobre una fuente particular.

Cuando queramos detectar los eventos de un componente determinado, primero debemos chequear la secci�n "C�mo se usa" el componente. Esta secci�n ofrece ejemplos de manejo de eventos de los que querr�s utilizar. Por ejemplo, C�mo crear Frames ofrece un ejemplo de escritura de un oyente de window que sale de la aplicaci�n cuando se cierra el frame.

.�C�mo Implementar un Manejador de Eventos

Todo manejador de eventos requiere tres partes de c�digo.

  1. Donde se declare la clase del manejador de eventos, el c�digo especifica que la clase o implementa un interface de oyente, o desciende una clase que implementa un interface de oyente. Por ejemplo.
    public class MyClass implements ActionListener {
    
  2. El c�digo que registra un ejemplar de la clase de manejo de eventos de un oynete sobre uno o m�s componentes. Por ejemplo.
    someComponent.addActionListener(instanceOfMyClass);
    
  3. La implementaci�n de los m�todos del interface oyente. Por ejemplo.
    public void actionPerformed(ActionEvent e) {
        ...//code that reacts to the action...
    }
    

Un escenario de manejo de eventos t�pico ocurre con los botones (JButton). Para detectar cuando el usuario pulsa un bot�n de la pantalla (o pulsa la tecla equivalente), un programa debe tener un objeto que implementa el interface ActionListener. El programa debe registrar este objeto como un oyente de acti�n del bot�n (la fuente del evento), usando el m�todo addActionListener. Cuando el usuario pulsa el bot�n de la pantalla, �ste dispara el evento action, Esto resulta en una llamada al m�todo actionPerformed del oyente de action, el �nico m�todo del interface ActionListener). El �nico argumento del m�todo es un objeto ActionEvent que ofrece informaci�n sobre el evento y su fuente.

              ActionEvent
button ----------------------------> action listener
                          
Descripci�n: Cuando el usuario pulsa un bot�n, los oyentes 
de action del bot�n son notificados.

Los manejadores de eventos pueden ser ejemplares de cualquier clase. Frecuentemente, se implementan usando clases internas an�nimas, lo que puede hacer el c�dio algo m�s confuso -- hasta que hayas usado las clases internas. Para m�s informaci�n sobre el uso de clases internas, puedes ver Usar Adaptadores y Clases Internas para Manejar Eventos.

Para m�s informaci�n sobre la implementaci�n de manejo de eventos, puedes ver Escribir Oyentes de Eventos.

.�Los Threads y el Manejo de Eventos

El c�digo de manejo de eventos se ejecuta en un s�lo threadm el thread de despacho de eventos. Esto asegura que todo manejador de eventos se terminar� de ejecutar antes de ejecutar otro. Por ejemplo, el m�todo actionPerformed del ejemplo anterior se ejecuta en el thread de manejo de eventos. El c�digo de dibujo tambi�n se realiza en el thread de despacho de eventos. Esto significa que mientras se est� ejecutando el m�todo actionPerformed, el GUI del programa est� congelado -- no se dibujar� nada ni se responder� a las pulsaciones del rat�n, por ejemplo.

Importante: El c�digo de manejo de eventos deber�a ejecutar cada pulsaci�n! De otro modo, el rendimiento de tu programa se ver�a empobrecido. Si necesitas hacer una operaci�n de larga operaci�n como resultado de un evento, hazlo arrancando un nuevo thread (o de otro modo envi�ndo una petici�n a otro thread) para realizar la operaci�n. Para obtener ayuda sobre le uso de threads, puedes ver C�mo usar Threads.

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP
ARTÍCULO ANTERIOR