PDF de programación - Programación basada en eventos

Programación basada en eventosgráfica de visualizaciones

Publicado el 7 de Julio del 2017
660 visualizaciones desde el 7 de Julio del 2017
77,1 KB
8 paginas
Creado hace 21a (03/12/2002)
Programación basada en eventos

Tipos de programas en Java
• Aplicaciones

• Se pueden ejecutar directamente en un entorno Java
• Tipos

• Pequeñas aplicaciones que se ejecutan dentro de un navegador

(o en el visualizador de applets - Appletviewer)
❏ Interfaz gráfico
❏ Limitaciones por motivos de seguridad

❏ Modo de consola

❏ Aplicaciones con interfaz gráfico (GUI)

-Interacción mediante teclado
-Interfaz basado en texto
-Ventanas graficas para entrada y salida de datos
-Iconos
-Dispositivos de entrada (e.g. ratón, teclado)
-Interacción directa

• Applets

Java

1

Java

Creación de una interfaz gráfico de usuario
• Composición de la interfaz gráfica de la aplicación (GUI)

• Elección de un contenedor (ventana) en la que se incluyen el

resto de los elementos gráficos de interacción

• Diseño del interfaz gráfico añadiendo componentes gráficos

de interacción (p.e. Botones, etiquetas, menús, ...)

• Establecer los gestores de eventos para responder a las

interacciones de los usuarios con la interfaz gráfica

• Visualizar la interfaz gráfica



Java lanza un hilo que se encarga de gestionar la interacción
del usuario con la interfaz gráfica,

por tanto el método principal puede acabar después de haberse creado
y visualizado la interfaz

Programación basada en eventos
• Eventos o sucesos

• Mensajes asíncronos producidos por interacción

❏ Interacción del usuario con la interfaz gráfica de un programa

-Ejemplo:

Interacción con el ratón (hacer click, arrastrar, mover, etc)
Introducir texto en un determinado campo

• Estos mensajes son objetos

• La programación basada en eventos consiste en

proporcionar métodos que respondan a dichos mensajes

Java

3

Java

2

4


Modelo de evento Java 1.0
• Basado en herencia
• Un programa gestiona el tratamiento de eventos de un GUI

• Especializando componentes del GUI y reescribiendo los

métodos action() o handleEvent()
❏ Devuelve true --> evento tratado
❏ Devuelve false --> el evento se propaga hacia arriba en la jerarquía

• Estructuración del código

• Cada componente se especializa para que gestione sus eventos

❏ Muchas clases muy pequeñas

• Todos los eventos de un grupo de componentes se tratan en un

componente que los contenga
❏ Los métodos action() o handleEvent() del componente contenedor debe

tener una instrucción de selección para determinar a que elemento
corresponde

Java

5

Java

• Muchas posibilidades de error
• No hay filtrado de eventos

❏ Problemas de eficiencia

Modelo de evento Java 1.0 - Problemas
• Muy complejo para interfaces con muchas funcionalidades

• Poco escalable

interfaz (GUI)

• No permite una separación clara entre la aplicación y la

• Todos los eventos se tratan mediante los mismos métodos

Modelo de evento Java 1.1
• Objetivos de diseño

• Simple y fácil de aprender a la vez que versátil
• Permite una separación clara entre el código de la aplicación y

el de la interfaz

• Facilita la creación de código robusto para la gestión de

eventos

• Soporte en ejecución para las herramientas visuales

❏ Eventos generados
❏ Eventos tratados

Modelo de delegación
• Delegación

• La responsabilidad de gestionar un evento, que ocurre en un

objeto (fuente), la tiene otro objeto (oyente)

• Eventos

• Eventos representados como objetos en una jerarquía de clases

❏ Una subclase para cada evento o tipo de eventos relacionados
❏ Estos objetos encapsulan toda la información del evento
-El tipo de evento, por ejemplo, pulsar el ratón
-El objeto fuente sobre el que se produjo el evento (e.g. un botón)
-El instante de tiempo en el que se produjo el evento
-La posición (x, y) donde se produjo el evento
-La tecla que se pulsó (para eventos de teclado)
-El estado de las teclas modificadoras (CTRL, SHIFT, ...) presionadas o no por el
usuario cuando sucedió el evento

• Propagación de eventos de una fuente a un oyente

❏ Invocación desde la fuente de un método del oyente pasándole el objeto

que define el tipo de evento generado

Java

7

Java

6

8

Fuentes y Oyentes
• Fuente (Source)

• Objeto que origina o lanza eventos

❏ En el API de cada objeto se define el conjunto de eventos que origina

• Proporciona un conjunto de métodos para registrar y eliminar

oyentes específicos para estos eventos
❏ set<TipoEvento>Listener - un único oyente
❏ add<TipoEvento>Listener - múltiples oyentes
❏ remove<TipoEvento>Listener - elimina un oyente

• Oyente (Listener)

• Objeto que gestiona o responde a los eventos
• Define uno o más métodos a ser invocados por la fuente de

eventos en respuesta a cada evento específico

• Objeto que implementa el interfaz <TipoEvento>Listener

Uso del modelo
• Los objetos que desean gestionar los eventos y recibir

dichas notificaciones tienen que registrarse como oyentes
e implementar los métodos de la interfaz correspondiente
• Cuando ocurre un evento la fuente informa a los oyentes

registrados invocando a dichos métodos (callback)

• En un programa Swing, normalmente la fuente de eventos

es un componente GUI y el oyente es un objeto
“adaptador” que implementa el o los oyentes adecuados
para que la aplicación gestione los eventos

• El oyente también puede ser otro componente Swing que

implementa uno o más interfaces oyentes para agrupar
objetos del GUI

Java

9

Java

Jerarquía de clases de eventos
• Cada clase representa un tipo de evento o un grupo de

eventos relacionados
• Una clase puede representar varios tipos de eventos
❏ MouseEvent: mouse up, mouse down, mouse drag, mouse move

• Raíz de la jerarquía
java.util.EventObject

• Los programas pueden crear nuevos tipos de eventos

especializando java.util.EventObject o los eventos AWT
java.awt.AWTEvent
• Los eventos del AWT se encuentran en el paquete

java.awt.event

Gestion de eventos
• 1. Una clase que desee gestionar un evento debe

implementar un interfaz (e.g. ActionListener)
❏ class ClaseGestor implements ActionListener { ….}

• 2. Establecer la relación entre la fuente de eventos

(componente) y el objetoClaseGestor que gestiona el
evento

❏ componente.addActionListener(objetoClaseGestor)

• 3. Implementación del método o métodos del interfaz en la

clase que gestiona el evento

❏ public void actionPerformed(ActionEvent ev) {

// codigo que implementa la respuesta a la acción del usuario
// sobre el componente

}

• Toda la información sobre el evento viene encapsulada en un

objeto de una clase específica derivada de Event

Java

11

Java

10

12


Eventos: bajo nivel y semánticos
• Eventos de bajo nivel

• Representan entradas o interacciones de bajo nivel con

elementos del interfaz gráfico

-Cambio de tamaño, cambio del foco, operación con el ratón o con el teclado

• Eventos semánticos

• Eventos de alto nivel que encapsulan la semántica del modelo

de componentes del interfaz de usuario

-Hacer una acción, un cambio de estado en un elemento, ...

• No están relacionados con una clase específica de componente

sino que pueden aplicarse a todos los componentes que
implementen un modelo semántico similar
❏ Evento “action”

-Lanzado por un botón cuando se pulsa una vez
-Lanzado por un elemento de una lista cuando se pulsa dos veces seguidas
-Lanzado por una opción de un menú cuando se selecciona
-Cuando se pulsa Enter en un campo de texto

Java

Eventos de bajo nivel

Evento

Significado

ComponentEvent

Cambios en el tamaño, posición o visibilidad de un componente

FocusEvent

KeyEvent

MouseEvent

Cambio de foco (capacidad de un componente para recibir
entradas desde el teclado)
Operación con el teclado

Operación con los botones del ratón o movimientos del ratón

WindowEvent

Cambio de estado en una ventana

AncestorEvent

Cambio en la composición, visibilidad o posición de un
elemento superior (ancestro) de la jerarquía de composición

Eventos de alto nivel

ActionEvent

ChangeEvent

ItemEvent

CaretEvent

ListSelectionEvent

Realización de la acción específica asociada al componente

Cambio en el estado del componente

Elemento seleccionado o deseleccionado

Cambio en la posición del cursor de inserción en un
componente que gestiona texto
Cambio en la selección actual en una lista

13

Java

Eventos AWT : bajo nivel y semánticos

Ejemplo 1- tratamiento de eventos

bajo nivel

java.awt.AWTEvent

java.awt.event.ComponentEvent (component resized, moved, etc.)
java.awt.event.FocusEvent (component got focus, lost focus)
java.awt.event.InputEvent

java.awt.event.KeyEvent (component got key-press, etc.)
java.awt.event.MouseEvent (component got mouse-down, etc.)

java.awt.event.ContainerEvent
java.awt.event.WindowEvent

semánticos

java.awt.AWTEvent

java.awt.event.ActionEvent ("do a command")
java.awt.event.AdjustmentEvent ("value was adjusted")
java.awt.event.ItemEvent ("item state has changed")
java.awt.event.TextEvent ("the value of the text object changed")

import java.awt.event.*;
import javax.swing.*;
public class GUISimple extends JFrame {

public GUISimple (){

JPanel panel = new JPanel();
JLabel etiqueta = new JLabel("Etiqueta 1");
panel.add(etiqueta);
JButton boton= new JButton("Correcto");
panel.add(boton);
GestorRaton oyenteBoton = new GestorRaton();
boton.addActionListener(oyenteBoton);
// se añade el panel al panel de contenido
getContentPane().add(panel);
setSize(250,80);
setVisible(true);}

public static void main(String args[]) {

GUISimple ventana = new GUISimple();
ventana.setTitle("ventana tipo JFrame"); }} // GUISimple

class GestorRaton implements ActionListener {

public void actionPerformed(ActionEvent evento) {

JButton boton = (JButton) evento.getSource();
System.out.println("Se ha pulsado el boton: " + boton.getLabel()); }}

Java

15

Java

14

16

Ejemplo 9.1: Java:Iniciación y referencia

Ejemplo 9.1: Java:Iniciación y ref
  • Links de descarga
http://lwp-l.com/pdf5006

Comentarios de: Programación basada en 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