Gestión de Eventos

Tradicionalmente, se programaba mediante bucles.

Las instrucciones, una tras otra

Sin embargo, ¿qué ocurre cuando se pulsa un botón?

Por eso se desarrolló la gestión de eventos

Eventos

¿Qué es un evento?

  • Un evento es una situación provocada normalmente desde el exterior y que se produce de manera asíncrona a la ejecución del programa
  • Algunos ejemplos de eventos:
    • Una tecla pulsada.
    • Un movimiento del ratón.
    • Un botón pulsado de la interfaz.
  • Es necesario un mecanismo que nos permita manejar este tipo de situaciones.

Eventos

¿Cómo se implementa eso?

  • Programación multi-hilo implícita:
    • Un hilo el control del programa.
    • Un hilo la gestión de las ventanas.
  • Existe un modelo de eventos definidos.
  • El programa es avisado automáticamente de todos los eventos en los que esté interesado.

Eventos

El hilo de la ventana

  • En cuanto se crea la primera ventana, SWING se encarga de:
    • Pintar las ventanas (redibujarlas si se dimensionan, por ejemplo).
    • Gestionar la relación entre el ratón y el teclado y las ventanas.
    • Generar los eventos necesarios (pulsaciones de teclas, paso del ratón sobre componentes, etc.)

Modelo de Eventos

Implementación en Java

  • Dos elementos distintos:
    • Fuentes: elementos sobre los que se producen los eventos. Por ejemplo, botones, listas, paneles, ...
    • Listeners (escuchadores): elementos que reciben las notificaciones de los eventos. Puede ser cualquier objeto que implemente alguno de los interfaces definidos en Java para la notificación de los eventos.

Modelo de Eventos

Funcionamiento

  • Se le asigna a una fuente uno (o varios) listeners.
                    <FuenteEvento>.add<EventoListener>( <Obj.Escuchador> )
                   
  • Cuando se produce un evento sobre la fuente de eventos, su escuchador es informado.
  • Para ello, se invoca al método que el escuchador tenga definido para esa notificación de ese tipo de evento.
  • El escuchador, dentro de ese método, contendrá el código necesario para el tratamiento del evento.

Modelo de Eventos

Interfaces

  • Las interfaces contienen métodos que reciben un objeto evento.
  • Serán invocados cuando se produzca un determinado tipo de evento
  • Cada interfaz está especializado en capturar un tipo de eventos

Modelo de Eventos

Interfaces. Ejemplos

InterfazMétodos
ActionListeneractionPerformed(ActionEvent)
FocusListenerfocusGained, focusLost(FocusEvent)
TextListenertextValueChanged(TextEvent)
KeyListenerkeyPressed, keyReleased, keyTyped(KeyEvent)
MouseListenermouseClicked, mousePressed, mouseReleased, mouseEntered, mouseExited(MouseEvent)
MouseMotionListenermouseDragged, mouseMoved(MouseEvent)
WindowListenerwindowActivated, windowClosed, windowClosing, windowDeactivated, windowDeiconified, windowIconified, windowOpened(WindowEvent)

Jerarquía de Eventos

Jerarquía eventos Java

Jerarquía de Eventos

Algunos aspectos interesantes

  • EventObject es el padre de todos los eventos.
  • AWTEvent es el padre de todos los eventos gráficos.
  • Información interesante sobre los eventos:
    • Clase EventObject
      • getSource(): devuelve el objeto sobre el que se ha producido el evento.
    • Clase ActionEvent
      • getModifiers(): : información variada sobre el evento (por ejemplo combinación de teclas pulsadas –shift, alt-).

Jerarquía de Eventos

Algunos aspectos interesantes

  • Información interesante sobre los eventos:
    • Clase MouseEvent
      • getModifiers(): información variada sobre el evento (p ej. el botón pulsado).
      • getX() y getY(): coordenada pulsación de ratón.
      • getClickCount(): número de clicks seguidos efectuados.

Jerarquía de Eventos

ComponenteEventoHecho que lo genera
ButtonActionEventEl usuario hace un clic sobre el botón.
CheckboxItemEventEl usuario selecciona o deselecciona el Checkbox.
ListActionEventEl usuario hace doble click sobre un elemento de la lista.
ListItemEvent El usuario selecciona o deselecciona un elemento de la lista.
ComponentMouseEventEl usuario pulsa o suelta un botón del ratón, el usuario mueve o arrastra el ratón.
ComponentFocusEventEl componente gana o pierde el foco.
ComponentKeyEventEl usuario pulsa o suelta una tecla.
TextFieldActionEventEl usuario termina de editar el texto (hace un intro).
WindowWindowEventLa ventana se abre, se cierra, se minimiza, se reestablece o se cierra.

Patrón observer

Referencias