Tema 8: Gestión de eventos

Documentos relacionados
Interacción con el Usuario Gestión de Eventos

Tópicos Avanzados de Programación (TAP3501)

Interfaz Gráfica de Usuario (GUI)

Programación de sistemas

III SEMANAS GESTIÓN DE EVENTOS PROGRAMACIÓN II CICLO. Ing. Manuel Jesús Sánchez Chero Profesor del Curso

Tipos de programas en Java. Programación basada en eventos. Programación basada en eventos. Creación de una interfaz gráfico de usuario

INTERFAZ GRÁFICO DE USUARIO

Programación de sistemas

Manejo de eventos AWT

Ingeniería del Software. Capa de Presentación. Java 2 con JFC/SWING. Componentes visuales. Gestión de la interfaz

Interfaces gráficas con Swing

Agenda. Contenedores y componentes

Construir una Interfaz Gráfica

Ejemplo de GUI con Swing

Aplicaciones Java. Juan Manuel Fernández Peña Curso 2011, 2013

Interfaces gráficas de usuario

INTERFAZ GRÁFICO DE USUARIO APLICACIONES DE EJEMPLO

GESTIÓN DE EVENTOS GUI EN JAVA 13/04/2007 DAI. Evento: Objeto que describe qué sucede

Componentes Swing. Las clases cuyo nombre comienza por J forman parte de Swing. Todas las demás están incluidas en AWT (Abstract Window Toolkit)

Estructura de las Aplicaciones Orientadas a Objetos El patrón Modelo-Vista-Controlador (MVC)

Interfaces gráficas. Jose Jesus García Rueda

Programación Orientada a Objetos

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein Javier Navarro

Universidad Carlos III de Madrid Departamento de Ingeniería Telemática. Swing

Programación de Eventos

GUÍA DE LABORATORIO 5 ARREGLOS DE UNA DIMENSIÓN

APELLIDOS:... NOMBRE:... GRUPO:... NÚMERO DE EXPEDIENTE:...

Aplicaciones Java. Juan Manuel Fernández Peña Curso 2011, 2013

Ejemplo de la Clase Persona

Uso de Java Swing. Noviembre de 2013

Desarrollando aplicaciones mediante componentes

Multitarea En Swing. Varios hilos trabajadores, también conocidos como hilos en segundo plano.

INTERFAZ GRÁFICO DE USUARIO

En este método la implementación de la interface de usuario donde se produce el evento y la implementación del oyente están en clases separadas.

2.1 Elementos gráficos en Java.

Introducción a la Programación Orientada a Objetos

Construcción de GUI en Java. Elementos de Swing. AWT v SWING. Contenedores superiores I. Componentes y contenedores

Programación Avanzada Ingeniería Civil en Computación

9. AWT (Abstract Window Toolkit)

Capítulo 7. Introducción a las Interfaces Gráficas de usuario. Continuar

Interfaces gráficas de usuario

Introducción a Swing. Taller de Programación 2016

Práctica 18c. Práctica 18c. José M. Ordax

I. Introducción a la programación orientada a objetos y al lenguaje JAVA Colegio Reuven Feuerstein --Javier Navarro

Interfaces Gráficas de Usuario en Java Julio Introducción. 2. Crear una ventana 2

Práctica 4: Java Remote Method Invocation (RMI)

- Crear los componentes que se muestran en dicha ventana.

USO DE LOS OBJETOS JLABEL, JTEXTFIELD Y JBUTTON

Indice. Swing: conceptos. Generalidades. Swing & AWT: diferencias. Interfaz Gráfica de Usuario (GUI)

Programación Avanzada. Juan Manuel Fernández. Curso 2011 Ejemplo de uso de sockets desde aplicaciones visuales. Usan un hilo en banco.

Interfaces gráficas I

INSTALACION Y PRUEBA DEL PLUGIN WindowBuilder para trabajar Swing en Eclipse

Autor: Ing. Tymoschuk, Jorge

Tema 6. Interfaces gráficas de usuario (Parte 1)

PROGRAMACIÓN WEB I SEMANA 7 ESTE DOCUMENTO CONTIENE LA SEMANA 7

Java Avanzado. Lenguaje de Programación Java. Interfaces Gráficas de Usuario con Java. Elaboró: Oscar Alejandro González Bustamante

// Suma.java // Programa de suma que utiliza a JOptionPane para entrada y salida. import javax.swing.joptionpane; // el programa usa JOptionPane

Interfaces de usuario [Interfaces de usuario con Java]

Trabajando con GUI en Java Componente java.swing

Creación y manejo de la base de datos y tablas

EJERCITACIÓN JAVA CÁTEDRA DE LENGUAJES ORIENTADOS A OBJETOS. Ing. Mario Bressano & Luciano Diamand ENVÍO RESUELTO 05

Aplicaciones gráficas en Java Librería Swing

INGRESAR DATOS CON UN CONTROL VISUAL EN JAVA. CLASE JTEXTFIELD Y MÉTODO GETTEXT. EJEMPLOS (CU00928C)

MATRICES, ARREGLOS O ARRAYS DE ELEMENTOS GRÁFICOS EN JAVA. EJEMPLO CON JLABEL Y JTEXTFIELD. (CU00930C)

Laboratorio #1: Manejo Básico de NETBEANS 7 e Introducción a pgadmin III

C. E. I. P. LAS VIÑAS. Bollullos del Cdo. (Huelva) Centro TIC/DIG. Las ventanas

Capítulo 6: Interfaces es de Usuario.

d) Mencione dos diferencias y dos semejanzas entre clases abstractas e interfaces.

Partes de un programa en Java. A. Ejemplo de un Programa en Java /* Programa Ejemplo de Java: Muestra una Ventana Archivo: Ejemplo1.

Federico Peinado

Ingeniería del Software Swing

Java GUI La librería Swing

Programación Java Curso C Draw

Java Avanzado Facultad de Ingeniería. Escuela de computación.

Interfaces y Clases Internas. ELO329: Diseño y Programación Orientados a Objetos

Examen de Programación II (Ingeniería Informática)

Introducción a componentes Swing

Desarrollo de aplicaciones con JAVA, JCreator, JDeveloper NetBeans

Desarrollo de aplicaciones gráficas

Documentación: Gestor de una Biblioteca (Eclipse, MySQL, JDK 1.6+) Jose Alberto Benítez Andrades

Tema: Introducción al IDE de Microsoft Visual C#.

HÉCTOR ARTURO FLÓREZ FERNÁNDEZ

Interfaces de usuario con

Interfaces de usuario con

USO DEL OBJETO JTABLE

Java y Eclipse Desarrolle una aplicación con Java y Eclipse

Microsoft Office Word

Clase 1 Excel

Sistema de Archivos en Java

GUIA DE JAVA NIVEL BÁSICO

IMPLEMENTACIÓN DEL JUEGO DEL AJEDREZ

POWER POINT Tema 1. Para salir de PowerPoint (suponiendo que se tiene abierto) puede:

INTERFACE COMPARATOR. DIFERENCIAS ENTRE COMPARATOR Y COMPARABLE. CLASE COLLECTIONS. EJERCICIOS RESUELTOS. (CU00918C)

INSTITUCION EDUCATIVA MANUEL ANGEL ANACHURY AREA: TECNOLOGIA E INFORMATICA

Aplicación para el Registro de Piscinas de Salud Pública del Servicio Canario de la Salud. Manual de Usuario 1.7

Transcripción:

Transparencias de Java Tema 8: Gestión de eventos Uploaded by Ingteleco http://ingteleco.webcindario.com ingtelecoweb@hotmail.com La dirección URL puede sufrir modificaciones en el futuro. Si no funciona contacta por email

TEMA 8: GESTIÓN DE EVENTOS CON AWT LA GESTIÓN DE EVENTOS Programación Tradicional: Generalmente, no existen modelos de gestión de eventos definidos. El programa debe, mediante un bucle, preocuparse de monitorizar constantemente las acciones que realiza el usuario. Ejemplo: Si el usuario pulsa ENTER, el programa no lo detecta a no ser que explícitamente lo pregunte mediante un getchar() Programación en Java (y en otros lenguajes actuales) Existen modelos de eventos definidos. El programa es avisado automáticamente de todas aquellas acciones (eventos) en los que esté interesado. Ejemplo: Si el usuario pulsa un botón, el entorno avisa al programa invocando un método especial que éste tiene reservado para la notificación de ese evento ( pulsar botón ). MODELO DE EVENTOS EN JAVA El modelo de eventos de Java distingue dos elementos: Fuentes de Eventos Elementos sobre los que se producen los eventos. Ejemplos: un botón, una lista, un panel,... Escuchadores de Eventos Elementos que reciben las notificaciones de los eventos Quién puede ser una fuente de eventos? 1

Cualquier componente de AWT (o SWING) sobre el que se puedan producir eventos (prácticamente todos) Quién puede ser un escuchador de eventos? Cualquier objeto (perteneciente a una clase) que implemente alguno de los interfaces definidos en Java para la notificación de los eventos. Funcionamiento: Toda Fuente de Eventos debe tener asignado un Escuchador de Eventos que reciba las notificaciones de sus eventos. Cuando se produce un evento sobre la fuente de eventos, su escuchador es informado. Para ello, se invoca el método que el escuchador tenga definido para la notificación de ese tipo de evento. El escuchador, dentro de ese método, tendrá el código necesario para tratar ese evento. Cómo se asigna un escuchador a una fuente de eventos? <FuenteEvento>.add<EventoListener>(<Escuchador>) Ejemplo Resumen: La interfaz CapturaEventoBoton posee el método BotonPulsado( ) que es el método que se invocará cuando se pulse el botón Escuchador de Eventos X Al pulsar el botón, el escuchador es informado BotonPulsado() //Codigo que se //ejecuta cuando se //pulsa el boton Asignamos a este botón el escuchador de eventos X Este objeto implementa la Interfaz CapturaEventoBoton 2

INTERFACES PARA LA NOTIFICACIÓN DE EVENTOS Interfaces que contienen métodos que serán invocados cuando se produzca un determinado tipo de evento. Cada interfaz está especializado en capturar un tipo de eventos determinado. Lista de algunas Interfaces y sus métodos INTERFAZ ActionListener FocusListener TextListener KeyListener MouseListener MouseMotionListener WindowListener MÉTODOS actionperformed(actionevent) focusgained(focusevent) focuslost(focusevent) textvaluechanged(textevent) keypressed(keyevent) keyreleased(keyevent) keytyped(keyevent) mouseclicked(mouseevent) mousepressed(mouseevent) mousereleased(mouseevent) mouseentered(mouseevent) mouseexited(mouseevent) mousedragged(mouseevent) mousemoved(mouseevent) windowactivated(windowevent) windowclosed(windowevent) windowclosing(windowevent) windowdeactivated(windowevent) windowdeiconified(windowevent) windowiconified(windowevent) windowopened(windowevent) Más interfaces en los apuntes y en el API Todos estos métodos reciben como parámetro un objeto Evento que posee información sobre el evento ocurrido. 3

TIPOS DE EVENTOS Los objetos de tipo Evento están organizados en jerarquías de clases de eventos, de la siguiente forma: La clase padre de todos los eventos es EventObject y la de los eventos de naturaleza gráfica es AWTEvent Cuando ocurre un evento, los objetos de tipo Evento son pasados como parámetro en los métodos que posee el escuchador. Cada objeto de tipo Evento posee información sobre el evento concreto que se ha producido. Obtención de la información de un evento: Cada tipo de evento posee una serie de métodos que permiten consultar la información del evento ocurrido. Métodos de la clase EventObject (más en el API) getsource() Devuelve el objeto (fuente de eventos) sobre el que se ha producido el evento. Métodos de la clase ActionEvent (más en el API) 4

getmodifiers() Devuelve un código que aporta información variada sobre el evento (por ejemplo, indica las combinaciones de teclas pulsadas: SHIFT+ALT) getactioncommand() Devuelve un string que ayuda a determinar el tipo de acción a ejecutar ante el evento. Tiene múltiples usos. Métodos de la clase MouseEvent (más en el API) getmodifiers() Devuelve un código que aporta información variada sobre el evento (por ejemplo, indica el botón del ratón pulsado) getx() y gety() Indica la coordenada X e Y donde se ha pulsado el ratón GetClickCount() Indica el número de clicks seguidos que se han efectuado con el ratón Tipos de eventos generados por cada fuente de eventos Cada componente (fuente de eventos), en función de la acción que se realice sobre él, generará distintos tipos de eventos Ejemplo: Componente Evento Hecho que lo genera Button ActionEvent El usuario hace un clic sobre el botón. Checkbox ItemEvent El usuario selecciona o deselecciona el Checkbox ActionEvent El usuario hace doble click sobre un elementos de la lista List El usuario selecciona o ItemEvent deselecciona un elemento de la lista 5

Component TextField Window EJEMPLOS MouseEvent FocusEvent KeyEvent ActionEvent WindowEvent Gestión de Eventos con AWT El usuario pulsa o suelta un botón del ratón, el cursor del ratón entra o sale o el usuario mueve o arrastra el ratón El componente gana o pierde el foco El usuario pulsa o suelta una tecla El usuario termina de editar el texto (hace un intro) La ventana se abre, se cierra, se minimiza, se reestablece o se cierra. Ejemplo Sencillo Ventana con un botón y una etiqueta. Cuando se pulse el botón queremos que en la etiqueta se visualice la fecha y hora actual. Pasos: Crear la ventana y todos sus componentes. Crear un escuchador que sea capaz de atender a los eventos generados al pulsar un botón. Evento generado: ActionEvent Interfaz que posee los métodos para atender ese evento: ActionListener Asignar ese escuchador al botón. Incorporar el código a ejecutar cuando se pulse el botón. Código: import javax.swing.jframe; import javax.swing.jbutton; 6

import javax.swing.jlabel; import javax.swing.jpanel; import java.awt.borderlayout; import java.awt.event.actionlistener; import java.awt.event.actionevent; import java.util.date; class EscuchadorBoton implements ActionListener JLabel etiqueta; public EscuchadorBoton(JLabel etiq) this.etiqueta = etiq; public void actionperformed(actionevent e) etiqueta.settext("botón Pulsado: " + new Date()); public class VentanaBoton extends JFrame JPanel panelboton; JLabel etiqueta; JButton boton; public VentanaBoton() etiqueta = new JLabel(); panelboton = new JPanel(); boton = new JButton("Pulsa Aquí"); panelboton.add(boton); this.getcontentpane().setlayout(new BorderLayout()); this.getcontentpane().add(etiqueta,"north"); this.getcontentpane().add(panelboton,"south"); 7

EscuchadorBoton escuchador = new EscuchadorBoton(etiqueta); boton.addactionlistener(escuchador); Gestión de Eventos con AWT this.setsize(300,100); this.settitle("ejemplo Sencillo"); this.show(); public static void main(string[] args) new VentanaBoton(); Ejemplo Sencillo siendo el escuchador la propia ventana A menudo, y puesto que cualquier objeto puede convertirse en un escuchador, en lugar de crear un objeto aparte para el escuchador se pone como escuchador de los eventos generados por los elementos de la ventana a la propia ventana. En la asignatura usaremos este segundo enfoque. Código: import javax.swing.jframe; import javax.swing.jbutton; import javax.swing.jlabel; import javax.swing.jpanel; import java.awt.borderlayout; import java.awt.event.actionlistener; import java.awt.event.actionevent; import java.util.date; public class VentanaBotonEscuchador extends JFrame implements ActionListener JPanel panelboton; JLabel etiqueta; JButton boton; public VentanaBotonEscuchador() 8

etiqueta = new JLabel(); panelboton = new JPanel(); boton = new JButton("Pulsa Aquí"); panelboton.add(boton); this.getcontentpane().setlayout(new BorderLayout()); this.getcontentpane().add(etiqueta,"north"); this.getcontentpane().add(panelboton,"south"); boton.addactionlistener(this); this.setsize(300,100); this.settitle("ejemplo Sencillo"); this.show(); public void actionperformed(actionevent e) etiqueta.settext("botón Pulsado: " + new Date()); public static void main(string[] args) new VentanaBoton(); Ejemplo con varias fuentes de eventos (del mismo tipo) Tenemos una ventana con tres botones y una etiqueta. Si asignamos a los tres botones un mismo escuchador (la propia ventana), Cómo podemos averiguar dentro del método actionperformed( ) el botón que se ha pulsado? 9

Solución: consultado la información que viene en el evento import javax.swing.jframe; import javax.swing.jbutton; import javax.swing.jlabel; import javax.swing.jpanel; import java.awt.borderlayout; import java.awt.event.actionlistener; import java.awt.event.actionevent; import java.util.date; public class VentanaBotones extends JFrame implements ActionListener JPanel panelbotones; JPanel paneletiqueta; JLabel etiqueta; JButton boton1; JButton boton2; JButton boton3; public VentanaBotones() etiqueta = new JLabel(); panelbotones = new JPanel(); paneletiqueta = new JPanel(); boton1 = new JButton("Boton1"); boton2 = new JButton("Boton2"); boton3 = new JButton("Boton3"); paneletiqueta.add(etiqueta); panelbotones.add(boton1); panelbotones.add(boton2); panelbotones.add(boton3); this.getcontentpane().setlayout(new BorderLayout()); this.getcontentpane().add(paneletiqueta,"north"); this.getcontentpane().add(panelbotones,"south"); boton1.addactionlistener(this); boton2.addactionlistener(this); boton3.addactionlistener(this); 10

this.setsize(300,100); this.settitle("ejemplo 3 Botones"); this.show(); public void actionperformed(actionevent e) JButton botonpulsado = (JButton)e.getSource(); if (botonpulsado == boton1) etiqueta.settext("se ha pulsado el botón 1"); if (botonpulsado == boton2) etiqueta.settext("se ha pulsado el botón 2"); if (botonpulsado == boton3) etiqueta.settext("se ha pulsado el botón 3") public static void main(string[] args) new VentanaBotones(); Ejemplo con varias fuentes de eventos (de distinto tipo) Tenemos una ventana con tres botones, una caja de texto y una etiqueta. En este caso, cómo averiguamos si el elemento sobre el que se produce el evento es un botón o la caja de texto? Solución: consultado la información del evento (ídem anterior) public class VentanaBotonesTexto extends JFrame implements ActionListener 11

... JButton boton1; JButton boton2; JButton boton3; JTextField texto; public VentanaBotonesTexto()... boton1.addactionlistener(this); boton2.addactionlistener(this); boton3.addactionlistener(this); texto.addactionlistener(this);... public void actionperformed(actionevent e) Object elemento = e.getsource(); if (elemento == boton1) etiqueta.settext("se ha pulsado el botón 1"); if (elemento == boton2) etiqueta.settext("se ha pulsado el botón 2"); if (elemento == boton3) etiqueta.settext("se ha pulsado el botón 3"); if (elemento == texto) etiqueta.settext("campo de texto rellenado con: " + texto.gettext());... Si en algún momento necesitásemos conocer el tipo al que pertenece alguno de los objetos, podríamos hacer: Object elemento = e.getsource(); if (elemento instanceof JButton) System.out.println("El elemento es un botón"); JButton boton = (JButton)elemento; if (elemento instanceof JTextField) 12

System.out.println("El elemento es de texto"); JTextField cajatexto = (JTextField)elemento; Ejemplo Completo Aspecto de la ventana: En este ejemplo se capturan distintos tipos de eventos: Eventos generados al pulsar botones Evento: ActionEvent Interfaz: ActionListener Acción a realizar: cambiar el color del panel superior Eventos generados al mover y pulsar el ratón sobre un panel Evento: MouseEvent Interfaz: MouseListener Acción a realizar: Visualizar en una lista el tipo de evento que se ha producido 13

Eventos generados al cerrar, minimizar, maximizar, la ventana Evento: WindowEvent Interfaz: WindowListener Acción a realizar: cerrar la ventana y terminar el programa. Código: import javax.swing.jframe; import javax.swing.jpanel; import javax.swing.jlist; import javax.swing.jbutton; import javax.swing.jlabel; import javax.swing.jscrollpane; import javax.swing.defaultlistmodel; import java.awt.color; import java.awt.gridlayout; import java.awt.borderlayout; import java.awt.event.actionevent; import java.awt.event.mouseevent; import java.awt.event.windowevent; import java.awt.event.actionlistener; import java.awt.event.mouselistener; import java.awt.event.windowlistener; public class VentanaEventos extends JFrame implements ActionListener, MouseListener, WindowListener JPanel panelsuperior; JPanel panelinferior; JPanel panelbotones; JButton botonazul; JButton botonverde; JButton botonrojo; JButton botonlimpiar; JButton botonsalir; JLabel etiqueta; JList listaeventos; DefaultListModel datoslista; JScrollPane scrolllista; 14

public VentanaEventos() panelsuperior = new JPanel(); panelinferior = new JPanel(); panelbotones = new JPanel(); botonazul = new JButton("Azul"); botonverde = new JButton("Verde"); botonrojo = new JButton("Rojo"); botonlimpiar = new JButton("Limpiar"); botonsalir = new JButton("Salir"); etiqueta = new JLabel("Panel que captura los eventos del ratón"); datoslista = new DefaultListModel(); listaeventos = new JList(datosLista); scrolllista = new JScrollPane(listaEventos); panelbotones.add(botonazul); panelbotones.add(botonverde); panelbotones.add(botonrojo); panelbotones.add(botonlimpiar); panelbotones.add(botonsalir); panelsuperior.add(etiqueta); panelinferior.setlayout(new BorderLayout()); panelinferior.add(scrolllista, "Center"); panelinferior.add(panelbotones, "South"); this.getcontentpane().setlayout(new GridLayout(2,1)); this.getcontentpane().add(panelsuperior); this.getcontentpane().add(panelinferior); // Asignamos escuchadores a todos los elementos // que puedan recibir eventos // Ponemos como escuchador de todos ellos a la // propia ventana botonazul.addactionlistener(this); botonverde.addactionlistener(this); botonrojo.addactionlistener(this); botonlimpiar.addactionlistener(this); botonsalir.addactionlistener(this); 15

panelsuperior.addmouselistener(this); this.addwindowlistener(this); Gestión de Eventos con AWT this.settitle("ventana con Eventos"); this.setsize(500,400); this.show(); // Método del interfaz ActionListener public void actionperformed(actionevent e) JButton botonpulsado = (JButton)e.getSource(); if (botonpulsado == botonazul) panelsuperior.setbackground(color.blue); if (botonpulsado == botonverde) panelsuperior.setbackground(color.green); if (botonpulsado == botonrojo) panelsuperior.setbackground(color.red); if (botonpulsado == botonlimpiar) datoslista.clear(); panelsuperior.setbackground(color.lightgray); if (botonpulsado == botonsalir) System.exit(0); // Los 5 métodos del interfaz MouseListener public void mouseclicked(mouseevent e) String linea = "Evento CLICK, "; if (e.getmodifiers() == MouseEvent.BUTTON1_MASK) linea = linea + "con BOTON IZQUIERDO "; 16

if (e.getmodifiers() == MouseEvent.BUTTON2_MASK) linea = linea + "con BOTON DEL CENTRO "; if (e.getmodifiers() == MouseEvent.BUTTON3_MASK) linea = linea + "con BOTON DERECHO "; linea = linea + "en coordenadas (" + e.getx() + "," + e.gety() + ")"; datoslista.addelement(linea); public void mouseentered(mouseevent e) String linea = "Evento ENTRAR AL PANEL en coordenadas (" + e.getx() + "," + e.gety() + ")"; datoslista.addelement(linea); public void mouseexited(mouseevent e) String linea = "Evento SALIR DEL PANEL en coordenadas (" + e.getx() + "," + e.gety() + ")"; datoslista.addelement(linea); public void mousepressed(mouseevent e) // Este método se invoca cuando se pulsa el botón // del ratón public void mousereleased(mouseevent e) // Este método se invoca cuando se libera el // botón del ratón //Los 7 métodos del interfaz WindowListener public void windowclosing(windowevent e) 17

System.exit(0); public void windowclosed(windowevent e) public void windowiconified(windowevent e) public void windowopened(windowevent e) public void windowactivated(windowevent e) public void windowdeactivated(windowevent e) public void windowdeiconified(windowevent e) public static void main(string[] args) new VentanaEventos(); 18