teoria.swing ii eventos

Upload: smit-mech

Post on 06-Jul-2015

95 views

Category:

Documents


0 download

TRANSCRIPT

Universidad Carlos III de Madrid Departamento de Ingeniera Telemtica Organizacin de Contenidos Audiovisuales

EventosObjetivo: Programacin Orientada a Eventos Modelo de Eventos en Java Ejemplos de eventos.

60 minutosTeora: Exposicin teora bsica.

60 minutosEjercicios: Resolucin ejercicios bsicos.

Trabajo en CasaEjercicios: Terminar los ejercicios no vistos en clase.

Conexin a PrcticasEjercicios: Diferentes ejercicios con los componentes aprendidos.

Jorge Ruiz Magaa

1

Universidad Carlos III de Madrid Departamento de Ingeniera Telemtica Organizacin de Contenidos Audiovisuales

1 Programacin Orientada a EventosAntes de comenzar con la programacin orientada a eventos vamos a explicar lo qu es un programa dirigido por eventos. Hasta ahora conocemos dos tipos de aplicaciones, aplicaciones en modo consola y aplicaciones grficas. Las aplicaciones en modo consola se ejecutan secuencialmente. Si el usuario interviene, es un paso ms dentro de la secuencia. El programa no continuar hasta que el usuario haya terminado la accin. En las aplicaciones grficas no se sigue este mismo modelo. Como sabemos las aplicaciones grficas pueden ejecutar varios hilos simultneamente para hacer diferentes operaciones a la vez. Pues bien, uno de esos hilos se encarga de gestionar la interaccin con el usuario mediante eventos. Este hilo consulta una cola de eventos que es alimentada por las diferentes acciones que el usuario ejecuta. Estas acciones se modelan como eventos son, por ejemplo, movimientos de ratn, pulsacin sobre teclas, botones, etc. Hay un nmero muy elevado de eventos. Incluso hay eventos que no son generados por el propio usuario. Este comportamiento hace que se puedan tratar las acciones del usuario a la vez que se pueden realizar otro tipo de operaciones. Puesto que las aplicaciones grficas tienen un comportamiento diferente, nosotros como programadores debemos ampliar nuestra forma de programar para adaptarnos a la programacin orientada a eventos. La programacin orientada a eventos, basndose en un marco de trabajo, permite al programador de una forma sencilla centrarse en la programacin de la respuesta a un evento. Por ejemplo, si cuando pulsamos un botn queremos que genere un archivo de texto, a nosotros como programadores nos interesa programar la accin de generar el archivo, siendo en este caso el entorno de ejecucin de Java el que se encargue del retro de trabajos. Para poder dominar la programacin orientada a eventos en Java debemos conocer antes su modelo de eventos.

Jorge Ruiz Magaa

2

Universidad Carlos III de Madrid Departamento de Ingeniera Telemtica Organizacin de Contenidos Audiovisuales

2 Modelo de Eventos en JavaEn el modelo de programacin de eventos en Java, tenemos los siguientes elementos: 1. Evento (event): Por ejemplo, pulsacin sobre un botn. 2. Fuente de evento (event source): Por ejemp lo, el botn sobre el que se genera la pulsacin. 3. Manejadores de eventos (event listener): Clase que implementar el manejo del evento (lo que se hace en respuesta al evento). Los manejadores de eventos tienen que registrarse en las distintas fuentes de eventos, por ejemplo 1:buton.addActionListener(manejador)

La fuente de eventos enva objetos de tipo EventObject a todos los manejadores registrados cuando se produce el evento 2. El manejador de eventos utilizar la informacin de EventObject para realizar la accin oportuna. En Java los eventos estn organizados dentro del paquete java.awt.event. La clase java.util.EventObject es la clase base de todos los eventos utilizados en las aplicaciones grficas. Por cada tipo de evento XxxEvent, tenemos u interfaz XxxListener que es la que nos na permite definir los manejadores de eventos. Ejemplos son:Tipo Evento Interfaz ActionEvent ActionListener KeyEvent KeyListener Tabla 1. Ejemplos de tipos de eventos y su interfaz asociada.

Ejercicio: Busca en el API los mtodos de las interfaces mencionadas en la tabla anterior. Como respuesta al evento tendremos que programar una clase que implemente los mtodos de la interfaz apropiada. Y, qu son los adaptadores? Java para facilitar la implementacin de algunos manejadores de eventos proporciona clases que ya implementan los mtodos de las interfaces en cuestin, permitiendo al programador centrarse exclusivamente en lo que le interesa. Ejemplos de estos adaptadores son: MouseAdapter y WindowAdapter.Con esta sentencia estamos registrando slo los manejadores para respuestas a acciones. Otros manejadores utilizarn un registro diferente. 2 Ntese como es plural, se indica manejadores por lo que una fuente puede indicar el evento a varios manejadores y una fuente puede registrar varios manejadores (varias llamadas a addActionListener, por ejemplo).1

Jorge Ruiz Magaa

3

Universidad Carlos III de Madrid Departamento de Ingeniera Telemtica Organizacin de Contenidos Audiovisuales

Si buscamos la clase WindowAdapter en el API obtendremos tendremos informacin sobre sta indicndonos lo siguiente: Responde al tipo de eventos WindowEvent. Implementa la interfaz WindowListener, que tiene los siguientes mtodos: o windowActivated(WindowEvent e) o windowClosed(WindowEvent e) o windowClosing(WindowEvent e) o windowDeactivated(WindowEvent e) o windowDeiconified(WindowEvent e) o windowGainedFocus(WindowEvent e) o windowIconified(WindowEvent e) o windowLostFocus(WindowEvent e) o windowOpened(WindowEvent e) o windowStateChanged(WindowEvent e)

Sera una tarea pesada si cada vez que tuviramos que tratar un evento de una ventana tuviramos que implementar todos los mtodos de la interfaz. Para ello, Java proporciona estos adaptadores. Lo que haramos sera extender de la clase adaptador que ya implementa todos los mtodos de la interfaz y redefinira el mtodo que considerase oportuno. Ejercicio: Investiga como suelen programar los adaptadores los mtodos de las interfaces que implementan.

Jorge Ruiz Magaa

4

Universidad Carlos III de Madrid Departamento de Ingeniera Telemtica Organizacin de Contenidos Audiovisuales

3 Ejercicios Bsicos sobre EventosManejadores implementados en clases no anidadasimport javax.swing.*; import java.awt.*; // No olvidar por los eventos import java.awt.event.*;

/* * Ejemplo de tratamiento de eventos */ class Ventana extends JFrame { /** Boton sobre el que aplicamos el evento */ JButton boton; /** No olvidar la llamada a super */ Ventana(String titulo) { super(titulo); boton = new JButton("Pulsame"); this.getContentPane().add(boton); // Tramtamiento para cerrar la ventana this.addWindowListener(new ManejadorVentana()); // Asignamos manejador al boton boton.addActionListener(new Manejador()); } /** Visualizacin de la ventana */ void visualizar() { this.pack(); this.setVisible(true); } } // Prueba

import java.awt.*; import java.awt.event.*; public class Manejador implements ActionListener { Manejador() { System.out.println("Manejador..."); } public void actionPerformed(ActionEvent e) { System.out.println("Accion"); } }

Jorge Ruiz Magaa

5

Universidad Carlos III de Madrid Departamento de Ingeniera Telemtica Organizacin de Contenidos Audiovisuales

import import // Nol import

javax.swing.*; java.awt.*; olvidar por los eventos java.awt.event.*;

/* * Manejador para la ventana. * Heredamos porque java ya nos ofrece un manejador. */ public class ManejadorVentana extends WindowAdapter { /** Acciones al cerrar */ public void windowClosing(WindowEvent e) { System.exit(0); } }

Ejemplo WindowAdapter, ActionListener, MouseAdapterimport java.awt.*; import java.awt.event.*; import javax.swing.*; /** * * Ejemplo de eventos en swing. * * @author UC3M - Dpto. Ingeniera Telemtica. * @version 1.0 */ class Ventana extends JFrame { private static int MAX_FILAS = 3; private static int MAX_COLUMNAS = 3; /** Matriz de botones. */ JButton [][] botones; /** No olvidar llamada al constructor */ Ventana(String titulo) { super(titulo); // Doy tamao. botones = new JButton[MAX_FILAS][MAX_COLUMNAS]; // Creo los botones for (int filas =0;filas