PDF de programación - LPS: Modelo de Eventos

Imágen de pdf LPS: Modelo de Eventos

LPS: Modelo de Eventosgráfica de visualizaciones

Publicado el 3 de Octubre del 2020
327 visualizaciones desde el 3 de Octubre del 2020
1,3 MB
21 paginas
Creado hace 13a (20/02/2011)
Federico Peinado
www.federicopeinado.es

Depto. de Ingeniería del Software e
Inteligencia Artificial
disia.fdi.ucm.es

Facultad de Informática
www.fdi.ucm.es

Universidad Complutense de Madrid
www.ucm.es

Laboratorio de Programación de Sistemas – Modelo de Eventos

2

 Una interfaz gráfica de usuario (GUI, Graphic
User Interface) en Java funciona en 3 pasos:
1. Composición



Se crea un contenedor para los elementos de la interfaz
Se crean y añaden los componentes de la interfaz que
aportan la representación visual y la interacción (botones,
menús, etc.)

Se crean objetos que responderán a las acciones de los
usuarios, llamando a los objetos “lógicos” de la aplicación

2. Establecimiento de los gestores de eventos

3. Ejecución en un hilo propio


Se lanza un hilo en el se ejecutarán permanentemente los
gestores de eventos, pendientes de las acciones del usuario
Por ello, el método principal de la aplicación suele crear la
GUI, hacerla visible y terminar su ejecución sin más



Laboratorio de Programación de Sistemas – Modelo de Eventos

3

 Clásica: Interacción controlada por la aplicación
• La aplicación es quien solicita al usuario los datos de
• Típico de las aplicaciones de línea de comandos o guiadas

entrada en el preciso momento en que las necesita
por menús que hemos usado hasta ahora

• Ventajas: Sencillo de programar
• Desventajas: Rigidez, usabilidad más restringida

 Moderna: Interacción controlada por el usuario

• El usuario es quien actúa sobre los controles ofrecidos por
la aplicación en el momento y de la manera en que prefiere

• Habitual en las aplicaciones con interfaces gráficas de

usuario, como ocurre en Java + Swing

• Ventajas: Énfasis en la experiencia del usuario
• Desventajas: Más difícil de programar, debido a la inversión

del control: el flujo de ejecución pasa de ser llevado por la
aplicación a estar en manos del usuario

Laboratorio de Programación de Sistemas – Modelo de Eventos

4

Laboratorio de Programación de Sistemas – Modelo de Eventos

5

 La dificultad que añade esta interacción

controlada por el usuario puede ser tratada
programando según un modelo de eventos
• Cada acción del usuario sobre la GUI producirá un evento

 Movimiento del ratón
 Clic del ratón sobre un botón del interfaz
 Escritura de caracteres dentro de un campo de texto
 …

• Un evento será un objeto que representa un mensaje asíncrono

que tiene otro objeto como destinatario

• Programar basándonos en este modelo consistirá en definir las

operaciones correspondientes a la gestión de estos mensajes

Laboratorio de Programación de Sistemas – Modelo de Eventos

6

 Los eventos se generan en objetos llamados “fuentes” y delegan la

responsabilidad de gestionarlos en otros objetos llamados “oyentes”
• Los oyentes se “registran” en las fuentes para cierto tipo de eventos

 Habitualmente esto se traduce en implementar los métodos de ciertos interfaces
• La fuente notifica sus eventos a todos los oyentes convenientemente
registrados, pero no comprueba qué se hace con ellos ni quien lo hace
 Invocando un método del oyente, pasándole el evento como argumento

• El oyente recibe el evento, un objeto que encapsula información:

 Tipo de evento (e.g. un clic derecho del ratón)
 Referencia a la fuente del evento (e.g. un botón de “Aceptar”)
 Instante de tiempo en el que se produjo el evento
 Posición en pantalla (x, y) asociada al evento, si es que la hay
 …

Laboratorio de Programación de Sistemas – Modelo de Eventos

7

El usuario hace
clic con el ratón

El oyente escucha el

evento y realiza la acción

que corresponda

¡EVENTO!

Oyente

Laboratorio de Programación de Sistemas – Modelo de Eventos

8

 Flexibilidad: Varios objetos de distintas clases pueden
registrarse como oyentes de un mismo tipo de evento

Evento: Un usuario se
ha conectado al sistema

Escucha el evento y crea los

objetos necesarios para mantener

la información del usuario

Escucha el evento y busca los datos
del usuario en la BD de estadísticas

Administrador de

Sesiones

Gestor de la
Base de Datos

Laboratorio de Programación de Sistemas – Modelo de Eventos

9

 Flexibilidad: Varios objetos fuente de distintas clases

pueden notificar el mismo tipo de evento

Botón de Guardar

(Barra de Herramientas)

Tecla Rápida de Guardar

(Gestor de Teclado)

Opción de Guardar
(Menú de Opciones)

Evento: El usuario quiere

guardar su trabajo

Oyente que contiene el código
para guardar el trabajo en fichero

Laboratorio de Programación de Sistemas – Modelo de Eventos

10

Laboratorio de Programación de Sistemas – Modelo de Eventos

11

 Desde Java 1.1 (1997), usado en AWT
 Objetivos

• Ser simple y fácil de aprender, pero a la vez versátil
• Permitir una separación clara entre distintos

fragmentos de código sin impedir que se comuniquen
• Facilitar la creación de código robusto para la gestión

de eventos y flujos de programa asíncronos

• Ofrecer mecanismos de delegación de

responsabilidades

Laboratorio de Programación de Sistemas – Modelo de Eventos

12

 Fuente (Source)

 Oyente (Listener)

• Cada fuente define el tipo de eventos que notifica y proporciona
métodos para registrar y eliminar oyentes de dicho tipo
 fuente.addTipoEventoListener(oyente)
Añade un oyente a la lista de los registrados
 fuente.removeTipoEventoListener(oyente)
Elimina un oyente de la lista de los registrados

• Cada oyente implementa el interfaz TipoEventoListener y
uno o más métodos a los que la fuente llama cuando notifica que
se ha producido dicho tipo de evento
public void TipoEventoPerformed(TipoEventoEvent e) {
// Código que implementa la respuesta al evento “e”
}

Laboratorio de Programación de Sistemas – Modelo de Eventos

13

 Cada tipo de evento se crea con una clase Java
• Algunas clases representan todo un grupo de eventos
(e.g. MouseEvent puede representar un “mouse up”,
“mouse down”, “mouse drag”, “mouse move”, etc.)
 En Java existen jerarquías de eventos y de

oyentes predefinidas
• Raíz de la jerarquía de los eventos:
java.util.EventObject
 Extendiendo esta clase pueden definirse nuevos eventos
• Interfaz común para todos los oyentes:
java.util.EventListener

Laboratorio de Programación de Sistemas – Modelo de Eventos

14

/**
* Clase Swing que implementa una ventana principal
* sencilla que contiene una etiqueta y dos botones
*/
public class VentanaSimple extends JFrame {
JLabel etiqueta; // Etiqueta
JButton botonHola; // Botón de interacción
JButton botonAdios; // Botón de interacción
// Panel contenedor de los anteriores elementos
JPanel panel;

Laboratorio de Programación de Sistemas – Modelo de Eventos

15

/*** Constructor de la clase VentanaSimple
*/public VentanaSimple (){

// Se crean los componentes de la ventana
etiqueta = new JLabel("Etiqueta inicial");
botonHola = new JButton("Hola");
botonAdios = new JButton("Adiós");
panel = new JPanel();
// Se añaden los componentes al panel
panel.add(etiqueta);
panel.add(botonHola);
panel.add(botonAdios);
// añade el panel a la ventana principal de la aplicación
getContentPane().add(panel);
// Se crea el oyente de la “acción” de los botones y se registra
OyenteAccion oyenteBoton = new OyenteAccion();
botonHola.addActionListener(oyenteBoton);
botonAdios.addActionListener(oyenteBoton);

}

Laboratorio de Programación de Sistemas – Modelo de Eventos

16

/*** Método principal de la clase VentanaSimple
*/public static void main(String args[]) {
// Se crea un objeto de tipo VentanaSimple
VentanaSimple ventana = new VentanaSimple();
...

}
/*** Oyente de eventos de acción de botón
* (Clase interna privada de VentanaSimple)
*/private class OyenteAccion implements ActionListener {
public void actionPerformed (ActionEvent evento){
// Se obtiene el botón fuente del evento
JButton boton = (JButton) evento.getSource();
// Se modifica la etiqueta según el botón pulsado
etiqueta.setText("Botón pulsado: " + boton.getText());

}}

Laboratorio de Programación de Sistemas – Modelo de Eventos

17

 A menudo las interfaces de los oyentes agrupan muchos métodos para

responder a eventos muy distintos
• Ejemplo: MouseListener agrupa los métodos para todos los eventos relacionados con el ratón

 mouseClicked()
 mouseEntered()
 mouseExited()
 ...

 Problema: Estas interfaces nos obligan a implementar muchos métodos
(vacíos) aunque nosotros sólo queramos tratar un tipo concreto de ellos
class OyenteRaton implements MouseListener {
public void mouseClicked(MouseEvent e) {
}
public void mouseEntered(MouseEvent e) {}
public void mouseExited(MouseEvent e) {}
public void mousePressed(MouseEvent e) {}
public void mouseReleased(MouseEvent e) {}

// Procesar clic del ratón

}

Laboratorio de Programación de Sistemas – Modelo de Eventos

18

 Solución: En Java lo que suele hacerse es

utilizar clases adaptadoras
• Implementaciones parciales de las interfaces de

oyentes, donde el código de todos los métodos está
vacío o es trivial
• Ejemplo: MouseAdapter (que implementa la interfaz
mencionada antes, MouseListener)
class OyenteRaton extends MouseAdapter {
public void MouseClicked(MouseEvent e) {
}
// Los demás métodos están vacíos en MouseAdapter

// Procesar clic del ratón

}

Laboratorio de Programación de Sistemas – Modelo de Eventos

19

 Las GUIs pueden llegar a tener muchos componentes gráficos y eventos

posibles, y se necesita una clase diferente para cada oyente
• En Swing estos componentes son fuentes, aunque también pueden ser oyentes
• Esto obliga a definir muchas clases oyentes, causando confusión al programador
 La solución en Java es usar clases anidadas (interiores, e incluso anónimas)
public class AdaptadorClaseInterior extends JFrame {

public AdaptadorClaseInterior(){

setTitle("Ventana que se puede cerrar");
setSize(300, 100);
addWindowListener(

new WindowAdapter() { // Gestor anónimo de ventana

public void windowClosing(WindowEvent e){
System.exit(0); // Salida del programa
}

} );

s
  • Links de descarga
http://lwp-l.com/pdf18316

Comentarios de: LPS: Modelo de Eventos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad