INTERFAZ GRÁFICO DE USUARIO



Documentos relacionados
Operación Microsoft Access 97

CAPÍTULO 4. EL EXPLORADOR DE WINDOWS XP

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

Las propiedades de la clase en java es el equivalente a las variables globales en lenguajes estructurados como el C.

Curso básico de computación para principiantes

MANUAL DE LA APLICACIÓN DE ENVÍO DE SMS

2_trabajar con calc I

WINDOWS. Iniciando Windows. El mouse

GUIA COMPLEMENTARIA PARA EL USUARIO DE AUTOAUDIT. Versión N 02 Fecha: 2011-Febrero Apartado: Archivos Anexos ARCHIVOS ANEXOS

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

V Manual de Portafirmas V.2.3.1

Trabajar con diapositivas

Al back-end o módulo de gestión de ALES II se accede desde su página principal:

MANUAL DE USUARIO. JNyARchiTech ALFONSO NEIL JIMÉNEZ CASALLAS MAYDA ALEXANDRA CARVAJAL VARGAS PONTIFICIA UNIVERSIDAD JAVERIANA

Presentaciones. Con el estudio de esta Unidad pretendemos alcanzar los siguientes objetivos:

Capítulo 9. Archivos de sintaxis

TEMA 20 EXP. WINDOWS PROC. DE TEXTOS (1ª PARTE)

Introducción a la programación orientada a objetos

TEMA 2 WINDOWS XP Lección 4 BLOC DE NOTAS

CONCEPTOS BASICOS. Febrero 2003 Página - 1/10

GENERACIÓN DE TRANSFERENCIAS

El teclado permite introducir texto, datos numéricos u órdenes concretas al ordenador.

Creación y administración de grupos de dominio

Programa diseñado y creado por Art-Tronic Promotora Audiovisual, S.L.

Gestión de Retales WhitePaper Noviembre de 2009

Operación de Microsoft Excel

WINDOWS : TERMINAL SERVER

UD6. Diseño de presentaciones

5.4. Manual de usuario

Ejercicios - Persistencia en Android: ficheros y SQLite

Centro de Capacitación en Informática

La pestaña Inicio contiene las operaciones más comunes sobre copiar, cortar y pegar, además de las operaciones de Fuente, Párrafo, Estilo y Edición.

Windows Journal en dos patadas

INDICE. 1. Introducción El panel Entities view El panel grafico Barra de botones Botones de Behavior...

GENERACIÓN DE ANTICIPOS DE CRÉDITO

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

Kaldeera Advanced Forms 2009 Guía del usuario

/05/2009

A continuación se describen cuáles son los elementos principales de las tablas, cómo crear una y cómo modificarla.

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

Roberto Quejido Cañamero

REGISTRAR LOS SITIOS WEB MÁS INTERESANTES

Formularios. Formularios Diapositiva 1

Race Manager by Master Timing Guía del usuario GUIA RACE MANAGER. Eventronic, SL

Departamento CERES Área de Tarjetas Inteligentes Manual de Usuario

Teclado sobre una PDA para Personas con Parálisis Cerebral

Servicio de Informática Vicerrectorado de Tecnologías de la Información y la Comunicación

Redes de área local: Aplicaciones y servicios WINDOWS

Que es Velneo vdataclient V7?

Programación Orientada a Objetos con Java

Agentes con Interfaz Gráfica.

Cómo creo las bandejas del Registro de Entrada /Salida y de Gestión de Expedientes?

Herramienta Encuestas. MiAulario

CENTRAL TELEFÓNICA VIRTUAL

La ventana de Microsoft Excel

REDES DE ÁREA LOCAL. APLICACIONES Y SERVICIOS EN WINDOWS

Notas para la instalación de un lector de tarjetas inteligentes.

En términos generales, un foro es un espacio de debate donde pueden expresarse ideas o comentarios sobre uno o varios temas.

GedicoPDA: software de preventa

Draw: objetos en 3D, diagramas de flujo y exportación

G R U P O S INDICE Cómo crear una cuenta en ARQA? Cómo tener un grupo en ARQA? Secciones y funcionalidades de los grupos Configuración del grupo

Quitar de un Directorio Activo Un Servidor que es el Maestro de Operaciones En Windows 2000 Server y Windows Server 2003

Applets y Aplicaciones

MANUAL DE USUARIO FACTURACIÓN ELECTRÓNICA

POWER POINT. Iniciar PowerPoint

Trazabilidad ERP Microsa Gestión de Lotes

1. Cambia el fondo del Escritorio

Ejercicio 1. Desarrollar un pequeño juego para practicar mecanografía.

Paso 1 de 13. Paso 2 de 13. Guía de aprendizaje de Flash CS5 Tutorial 3. Creación de un logotipo textual.

Guía de usuario para el acceso al recibo de nómina mediante la intranet de la Conselleria

Para crear una lista como la anterior, primero escribe la información, y después selecciona el texto y aplícale el formato de viñetas.

F O R M U L A R I O S FORMULARIOS

RELACIÓN DE PRÁCTICAS DEL TEMA 2

Oficina Online. Manual del administrador

Correo Electrónico: Webmail: Horde 3.1.1

Cuando creamos una presentación podemos después modificarla. estas operaciones que siendo tan sencillas tienen una gran utilidad.

Paradigmas de Programación

LiLa Portal Guía para profesores

Región de Murcia Consejería de Educación, Ciencia e Investigación. Manual Usuario FCT

Introducción a Google Calendar Breve guía sobre algunas de sus funcionalidades destacables.

CATÁLOGO CATÁLOGO CATÁLOGO CATÁLOGO CATÁLOGO

NOTAS TÉCNICAS SOBRE EL SIT: Documentos de Gestión

CAPITULO 4. Requerimientos, Análisis y Diseño. El presente capítulo explica los pasos que se realizaron antes de implementar

Interfaz Web de Correo

Capítulo V. Implementación

COPIA SEGURIDAD Y RESTAURACIÓN CURSO

GUÍA DE USUARIO DEL CORREO

Adaptación al NPGC. Introducción. NPGC.doc. Qué cambios hay en el NPGC? Telf.: Fax.:

Manual de usuario para Android de la aplicación PORTAFIRMAS MÓVIL

1.- MENU DE CONTROL O MENU VENTANA: permite cerrar la ventana cambiarla de tamaño y pasar a otra ventana

MANUAL DE USUARIOS DEL SISTEMA MESA DE SOPORTE PARA SOLICITAR SERVICIOS A GERENCIA DE INFORMATICA

Lenguajes de Programación Curso Práctica 4. Herencia. Utilización de interfaces y clases abstractas. 1. Interfaces Clases abstractas 2

UNIDAD I PROCESADOR DE TEXTOS

PLANTILLAS DE DOCUMENTOS EN WORD 2007

HIPERVÍNCULOS. Es posible asignar un vínculo a un texto, a una imagen, o a parte de una imagen

MANUAL DEL PROGRAMA DE ASESORAMIENTO (Asesores) Navegador y limpiar caché/cookies...2 Acceso al programa de Asesoramiento... 7

Herramientas CONTENIDOS. MiAulario

Módulo II - PowerPoint

Guía Práctica para el Uso del Servicio de Software Zoho CRM

Transcripción:

Programación JAVA INTERFAZ GRÁFICO DE USUARIO 3 - Referencia Bibliográfica Autor Adolfo Aladró García Publicado en la revista Solo Programadores num. 119 Ejemplos copiados del libro Java 2 - Curso de Programación Fco. Javier Ceballos. RA-MA Sumario En una aplicación JFC/Swing se denomina evento a cualquier suceso provocado por el usuario, o por cualquier componente de la propia aplicación, y que puede ser "capturado" y procesado por ésta. Índice de Contenidos 3-3.1 Hacer clic 3.1.1 Clases anónimas, clases públicas y clases internas 3.2 La clase ActionEvent 3.3 Los eventos del ratón 3.4 La clase MouseEvent 3.5 Los eventos del teclado 3.6 La clase KeyEvent 3.7 Conclusiones 1

3.1 Hacer clic Las aplicaciones interaccionan con el usuario "manejando" los eventos que éstos producen al hacer clic en los botones, mover el ratón, introducir texto, seleccionar un elemento de una lista, etc. Asimismo los componentes que forman parte de una aplicación pueden "escuchar" y "lanzar" eventos para comunicarse con otros elementos. Una aplicación que no emplea eventos (que no implementa "manejadores" de eventos) puede considerarse simplemente como una película o una animación, ya que todo sucede en la pantalla con independencia de lo que hace el usuario. La mayor parte de las aplicaciones no se comportan de esta forma sino que tratan y manejan un gran número de eventos. Seguidamente se muestra un ejemplo muy sencillo que ilustra cómo se manejan los eventos en Java. En primer lugar se define un botón: JButton jbutton = new Jbutton("Boton 1"); El evento más común y conocido asociado a un botón es la pulsación, es decir, cuando el usuario hace clie. Para capturar este evento es preciso añadir al objeto jbutton lo que se conoce como un listener. Un listener es un objeto que va a "escuchar" los eventos producidos por el componente. En realidad no sólo los "escucha" sino que además va a procesarlos. Existen diferentes tipos de listeners en función de qué evento es el que se va a tratar. Todos los componentes cuentan con métodos para añadir listeners, y estos métodos también cambian en función del tipo de listener. Por ejemplo, el método addactionlistener que la clase JButton hereda de la clase javax.swing.abstractbutton sirve para establecer un listener que procesa el evento que se produce cuando el usuario pulsa el botón. addactionlistener espera como parámetro un objeto que implemente la interfaz java.awteventactionlistener, la cual únicamente cuenta con un método llamado actionperformed. Éste método se ejecutará cada vez que el usuario haga clic en el botón. 3.1.1 Clases anónimas, clases públicas y clases internas Existen diversas formas de crear y asignar listeners a los componentes. La más simple y directa es la que se muestra a continuación: jbutton1.addactionlistener ( new java.awt.event.actionlistener() public void actionperformed(java.awt.event.actionevent evt) jbutton1actionperformed(evt); ); 2

En este ejemplo el objeto que se pasa como parámetro al método addactionlistener es una instancia de una clase que implementa la interfaz ActionListener y que se crea sobre la marcha. A este tipo de clases normalmente se les denomina clases anónimas, ya que carecen de nombre y simplemente se definen al mismo tiempo que se crea la instancia a partir de una interfaz o de otra clase. Aunque a la derecha del operador new aparece un nombre de una interfaz en realidad lo que se está creando es una instancia de una clase que implementa esa interfaz, y que por consiguiente tiene que tener todos los métodos de dicha interfaz. Si se añade el botón anterior a la aplicación, empleando para ello el método add del contenedor: GetContentPane().add(Jbutton); O en caso de incluirlo en algun panel getcontentpane().add(jpanel1, java.awt.borderlayout.north); y se hace clic en el botón, aparecerá el correspondiente mensaje "El botón ha sido pulsado." en la consola de salida. La ventaja principal que presenta crear listeners con clases anónimas es que el código de éstas tienen acceso a todas las variables públicas definidas en la clase principal que las contiene sin necesidad de pasar parámetros. Además el control de los eventos está ahí justo donde es necesario en vez de estar distribuido a lo largo de una serie de ficheros independientes, que es otra de las maneras de crear listeners como más adelante se estudiará. La mejor forma de ver esto es con un ejemplo. En la clase principal se define ahora una etiqueta cuyo propósito es mostrar el número de veces que el usuario ha pulsado el botón: public Jlabel = new Jlabel ("El boton ha sido pulsado 0 veces"); O tambien public javax.swing.jlabel jlabel1; jlabel1 = new javax.swing.jlabel(); jlabel1.settext("el boton ha sido pulsado 0 veces"); jpanel1.add(jlabel1); Para llevar la cuenta de las pulsaciones se define además un variable denominada iclickcounter: int iclickcounter=0; El método actionperformed del listener ahora incrementa el valor de la variable y actualiza la información de la etiqueta simplemente haciendo: 3

private void jbutton1actionperformed(java.awt.event.actionevent evt) iclickcounter++; StringBuffer sbf = new StringBuffer(); sbf.append("el boton ha sido pulsado" ); sbf.append(iclickcounter ); sbf.append(" veces" ); jlabel1.settext(sbf.tostring()); Esto es así porque las variables jlabel e iclickcounter están declaradas como públicas en la clase JApplication3_1, que es la que se corresponde con este ejemplo. Tal y como ya hemos adelantado, también existe la posibilidad de crear una clase aparte para tratar el evento asociado. Así por ejemplo, se podría crear la siguiente clase: import java.awt.event.*; public class swing3_buttonactionlistener implements ActionListener public swingiii punteroclase_swingiii; public void actionperformed(actionevent e) - - - - La clase JApplication3_1_ButtonActionListener implementa la interfaz ActionListener por lo que una instancia de ella puede emplearse perfectamente como listener de cualquier botón: jbutton1.addactionlistener(new swing3_buttonactionlistener()); Ahora bien, queda por resolver cómo desde el método actionperformed se va a modificar los valores de iclickcounter y jlabel, que son atributos de la clase correspondiente a la aplicación principal. La solución más simple consiste en pasar algún tipo de referencia a la clase JApplication3_1_ButtonActionListener de forma que pueda acceder a esa información. Una posibilidad es la que se ofrece en el listado 1 4

listado 1 Modificando IclickCounter y jlabel dede el método ActionPerformed import java.awt.event.*; public class swing3_buttonactionlistener implements ActionListener public swingiii punteroclase_swingiii; public void actionperformed(actionevent e) punteroclase_swingiii.iclickcounter++; StringBuffer sbf = new StringBuffer(); sbf.append("el boton ha sido pulsado" ); sbf.append(punteroclase_swingiii.iclickcounter ); sbf.append(" veces" ); punteroclase_swingiii.jlabel1.settext(sbf.tostring()); // constructor public swing3_buttonactionlistener (swingiii miclase_swingiii) this.punteroclase_swingiii=miclase_swingiii; La propia clase JApplication3_1 se pasa como parámetro y se almacena como atributo de JApplication3_1_ButtonActionListener para poder acceder posteriormente a las propiedades iclickcounter y jlabel. Por último también es posible definir la clase correspondiente al listener como una clase interna. De esta forma el método actionperformed también tiene acceso a los atributos de la clase principal. Normalmente cualquiera de las tres opciones es válida. No obstante las clases anónimas e internas se emplean preferentemente cuando el código del listener no es muy grande. Sin embargo si el manejador tiene un número considerable de líneas de código, así como una cierta complejidad, la mejor opción suele ser crear una clase externa y pasar al constructor los parámetros que permitan hacer las referencias que sean necesarias. 3.2 La clase ActionEvent La clase java.awteventactionevent contiene todo tipo de información acerca del evento que se acaba de producir. Algunos de los métodos más importantes que deben conocerse son: public String getactioncommand() public long getwhen() public int getmodifiers() public String paramstring() public Object getsource() 5

El método getactioncommand devuelve la cadena de texto que indica cuál es el tipo de función que en ese momento el botón ostenta. El método getactioncommand suele emplearse en combinación con el método setactioncommand de la clase javax.swing.abstractbutton cuando se implementan botones con estado, es decir, botones que hacen una cosa u otra cuando el usuario hace clic, en función del estado en el que se encuentran, estado que se establece mediante setactioncommand y se consulta mediante getactioncommand. El método getwhen devuelve un valor numérico que expresa la fecha y el momento exactos en el que se ha producido el evento en forma de milisegundos transcurridos desde el 1 de enero de 1970 a las 00:00:00. El método getmodifiers se emplea para determinar si durante la pulsación del botón se ha pulsado igualmente alguna combinación de teclas como ALT, CTRL, etc. El valor devuelto por este método es de tipo long y representa una máscara de forma que si por ejemplo se desea conocer si se ha pulsado la tecla ALT al mismo tiempo que se ha hecho clic en el botón basta con hacer: if ((evt.getmodifiers() & java.awt.event.actionevent.alt_mask)== java.awt.event.actionevent.alt_mask) System.err.println("La tecla ALT ha sido pulsada"); else System.err.println("La tecla ALT no ha sido pulsada"); El método paramstring devuelve una cadena de texto que identifica el evento producido. Por ejemplo: ACTION PERFORMED, cmd=botón,1, whwen = 108522672796, modifiers=button1 Por último, el método getsource es uno de los más importantes ya que devuelve una referencia al objeto que provocó el evento. A partir de este objeto, y ascendiendo por la jerarquía de clases propia de la aplicación, es posible llegar a cualquier otro componente de la misma si así se desea. Por ejemplo, el siguiente fragmento de código muestra la jerarquía de los componentes partiendo del botón que se ha pulsado: -- OJO no está bien javax.swing.jcomponent componente = (javax.swing.jcomponent)evt.getsource(); do System.err.println(componente); componente=javax.swing.jcomponent.getparent(); while (componente!= null); El resultado que arroja es: 6

FALTA; El componente padre del botón es un componente de tipo JPanel. Inmeditamente después en la jerarquía está otro componente, esta vez de tipo JLayeredPane. Finalmente el último de los componentes, la raíz del árbol, es JApplication3_2, o lo que es lo mismo, la aplicación misma. 3.3 Los eventos del ratón El ratón es seguramente uno de los dispositivos que más eventos puede producir. La interfaz java.awt.eventmouselistener define algunos de los métodos más comunes relacionados con el ratón. En el siguiente ejemplo de la aplicación se va a crear un componente de tipo Canvas. Éste ocupará toda el área disponible y cada vez que el usuario haga clic en el componente se mostrará un pequeño cuadrado negro centrado precisamente en el mismo sitio donde se ha producido la pulsación. En primer lugar se define y configura el área de dibujo: public class Canvas extends javax.swing.jframe /** Creates new form Canvas1 */ public Canvas() initcomponents(); private void initcomponents() canvas1 = new java.awt.canvas(); addwindowlistener(new java.awt.event.windowadapter() public void windowclosing(java.awt.event.windowevent evt) exitform(evt); ); canvas1.setbackground(new java.awt.color(255, 255, 255)); getcontentpane().add(canvas1, java.awt.borderlayout.center); pack(); Seguidamente se emplea el método addmouselistener para establecer un listener que "escuche" los eventos producidos por el ratón (véase el listado 2) 7

Listado 2 - "Escuchando" los eventos del ratón canvas1.addmouselistener ( new MouseListener() public void mouseclicked(mouseevent evt) int x = evt.getx(); int y = evt.gety(); ); Graphics g = canvas1.getgraphics(); g.fillrect(x-8, y-8, 16, 16); public void mousepressed(mouseevent evt) public void mousereleased(mouseevent evt) public void mouseentered(mouseevent evt) public void mouseexited(mouseevent evt) Como se puede observar en el listado 2, una de las desventajas que presenta la utilización de clases anónimas para implementar listeners es que es preciso implementar todos los métodos definidos en la interfaz, aunque para ello haya que dejarlos vacíos en muchas ocasiones, como en este ejemplo. El método mouseclicked se ejecuta cada vez que el usuario pulsa en el área de dibujo. En ese momento los métodos getx y gety devuelven la posición en la que se hizo dic. El método getgraphics permite acceder al objeto Graphics el cuál cuenta con numerosos métodos de dibujo, como fillrect, que pinta un rectángulo en la posición determinada por los dos primeros parámetros y la dimensión determinada por los dos segundos. Si la aplicación del ejemplo precedente quisiera emular más fielmente a las aplicaciones de dibujo tradicional, lo más adecuado sería hacer que se pintara un cuadro negro al hacer dic y un cuadro blanco, es decir, del color de fondo, al pulsar con el botón derecho del ratón. De este modo se podrían "dibujar" y "borrar" píxeles. Para implementar esta funcionalidad basta con modificar un poco el listener del componente correspondiente, tal como muestra el listado 3. En este caso el método getbutton de la clase MouseEvent devuelve el botón del ratón que ha sido pulsado. 8

Listado 3 - "Escuchando" los eventos del ratón, Segunda Versión canvas1.addmouselistener ( public void mouseclicked(mouseevent evt) public void mousepressed(mouseevent evt) int x = evt.getx(); int y = evt.gety(); java.awt.graphics g = canvas1.getgraphics(); if (evt.getbutton()==java.awt.event.mouseevent.button1) g.setcolor(java.awt.color.black); else g.setcolor(java.awt.color.white); g.fillrect(x-8, y-8, 16, 16); ); public void mousereleased(mouseevent evt) public void mouseentered(mouseevent evt) public void mouseexited(mouseevent evt) Obsérvese que además se ha trasladado la lógica al método mousepressed el cuál se ejecuta cuando el usuario pulsa en el ratón, con independencia de que posteriormente lo mantenga pulsado o no. En decir, el evento que "escucha" el método mouseclicked es lo que podría denominarse como clic completo del ratón (pulsar y solar) mientras que el evento que "escucha" mousepressed se corresponde únicamente con la primera parte del anterior. Normalmente se suele emplear mousepressed en vez de mouseclicked ya que en la práctica resulta más preciso. Otra de las funcionalidades que se podría añadir es aquella que permite al usuario pulsar, arrastrar y soltar para dibujar varios píxeles seguidos "a mano alzada" con el ratón. Para ello es preciso definir otro listener diferente (véase el listado 4). 9

Listado 4 - "Escuchando" los eventos del ratón. Tercera Versión canvas1.addmousemotionlistener ( new java.awt.event.mousemotionadapter() public void mousedragged(java.awt.event.mouseevent evt) canvas1mousedragged(evt); ); private void canvas1mousedragged(java.awt.event.mouseevent evt) int x = evt.getx(); int y = evt.gety(); java.awt.graphics g = canvas1.getgraphics(); g.setcolor(java.awt.color.black); g.fillrect(x-8, y-8, 16, 16); La interfaz java.awt.event.mousemotionlistener permite seguir el movimiento del ratón y, en el caso concreto de que el botón esté pulsado, implementar las funciones típicas de arrastrar y soltar. En último lugar, también existe un medio para controlar el evento que se produce cuando el usuario emplea la rueda del ratón, tal como se ve en el listado 5. Listado 5 - "Escuchando" la rueda del ratón canvas1.addmousewheellistener ( new java.awt.event.mousewheellistener() public void mousewheelmoved(java.awt.event.mousewheelevent evt) canvas1mousewheelmoved(evt); ); private void canvas1mousewheelmoved(java.awt.event.mousewheelevent evt) System.err.println("La rueda del raton se ha girado"); La interfaz MouseWheelListener cuenta con el método mousewheelmoved el cuál se ejecuta cada vez que la rueda del ratón se mueve. La clase java.awteventmousewheelevent almacena información con respecto al movimiento de la rueda. Algunos de sus métodos más importantes son: public int getscrollamount() 10

public int getscrolltype() public int getunitstoscroll() Java - Interfaz Gráfico de Usuario (GUI) El primero devuelve el desplazamiento producido por la rueda del ratón. El método getscrolltype devuelve el tipo de desplazamiento que debe tener lugar como respuesta a este evento (por unidades o por bloque). Finalmente el método getunitstoscroll proporciona el número de unidades a desplazar (sólo debe tenerse en cuenta cuando el tipo de desplazamiento sea por unidades). 3.4 La clase MouseEvent La clase java.awteventmouseevent es equivalente a ActionEvent aunque también implementa algunos métodos que son propios del ratón, como los métodos getx y gety que se han visto en el ejemplo anterior. Algunos de ellos son: public int getbutton() public Point getpoint() public int getx() public int gety() Al igual que ocurre con la clase ActionEvent también es posible determinar si las teclas ALT,CRTL, etc. estaban pulsadas al mismo tiempo que el usuario ha hecho clic empleando el método getmodifiers. 3.5 Los eventos del teclado El teclado es otra las fuentes principales de eventos que existen en las aplicaciones. Típicamente se produce cada vez que se ofrece al usuario un campo de texto donde puede escribir, o incluso puede emplearse el teclado para hacer clic en un botón si así se desea o el ratón no está disponible. El ejemplo del listado 6 muestra un campo de texto en la aplicación que "captura" las pulsaciones del teclado. 11

Listado 6 - "Capturando" las Pulsaciones del teclado jtextarea1= new javax.swing.jtextarea(); jtextarea1.addkeylistener ( new java.awt.event.keylistener() public void keytyped(java.awt.event.keyevent e) public void keypressed(java.awt.event.keyevent e) if (e.isactionkey()) System.err.println("ACCTION KEY" + e.getkeycode()); else System.err.println("NORMAL KEY" + e.getkeychar()); public void keyreleased(java.awt.event.keyevent e) ); El método addkeylistener se utiliza para añadir un listener al componente que se responsabilice de "escuchar" los eventos provocados los el teclado. La interfaz KeyListener cuenta con tres métodos: keytyped, keypressed y keyreleased. El primer método se ejecuta cuando el usuario pulsa una técla (la pulsa y la suelta), el segundo cuando la pulsa y el tercero cuando la suelta. 3.6 La clase KeyEvent La clase KeyEvent, como ActionEvent y MouseEvent anteriormente, contiene información relativa al evento. En el caso de los eventos producidos por el teclado la información más importante es, como cabe suponer, la tecla o combinación de teclas que el usuario ha pulsado. Primeramente el método isactionkey permite diferenciar entre las teclas llamadas "de acción" (las flechas, página siguiente y página anterior, insertar, borrar, etc.) y el resto de las teclas. Para este segundo tipo de pulsaciones el método getkeychar devuelve el carácter tecleado por el usuario. El método getkeycode en cambio devuelve el código asociado a esa pulsación. De forma equivalente a los casos anteriores el método getmodifiers sirve para determinar qué combina.ción de teclas ha sido empleada. 3.7 Conclusiones La forma de establecer listeners para los distintos componentes de una interfaz JFC;Swing es prácticamente idéntica, ya sea para un evento provocado por el ratón, el teclado o cualquier otro dispositivo. No hay aplicación o applet Java que no trate eventos ya que son la esencia de la interacción con el usuario. 12

13