En algunos de los capitulos anteriores ya se ha trabajado con manejadores de eventos como: ActionListner, ListSelectionlistener, AdjustmenttListener. En este captulo se har una descripcin ms ormal sobre el manejo de eventos y bsicamente se implementar los eventos del mouse y del teclado. !n evento es una accin iniciada por un usuario, como por ejemplo al teclear un carcter o pulsar un botn del ratn. "odo objeto puede ser notiicado del evento. Lo #ue se tiene #ue hacer es implementar la interace apropiada y ser registrado como un oidor del evento en la uente apropiada. La clase #ue se utili$a para la generacin de eventos es java.awt.Event. Los componentes Swing pueden generar muchas clases de evento. Algunos son: Tipo de Oidor Accin o evento ActionListener Cuando el usuario pulsa un botn, presiona Enter mientras teclea en un campo de texto, o elige un tem de men. WindowListener El usuario elige un JFrame (ventana principal). MouseListener El usuario pulsa un botn del ratn mientras el cursor est sobre un obeto. MouseMotionListener El usuario mueve el cursor sobre un obeto. FocusListener El obeto obtiene el !oco del teclado. ListSelectionListener Cambia la tabla o la seleccin de una lista. "odo manejador de eventos re#uiere lo siguiente: Se debe declarar la clase del manejador de eventos, donde se implementa la interace del oidor public class "iClase implements #ction$istener % Asociar los objetos #ue se #uieren escuchar con el oidor. nombreobeto.add#ction$istener(t&is)' La implementacin de los m%todos de la interace oidora. public void action(er!ormed(#ctionEvent e) % ...))codigo de las acciones a reali*ar... + 9.1. Eventos del Mouse !n evento de &ouse ocurre cuando el usuario interact'a con el &ouse (o dispositivo similar) para interactuar con un objeto. Los eventos &ouse ocurren cuando el cursor entra o sale del rea de pantalla de un objeto, o cuando el usuario pulsa o libera el botn del ratn. 9.. M!todos de Eventos Mouse La interace Mouse"istener y su correspondiente clase adaptadora, MouseAdapter, contiene los siguientes m%todos: void #ouse$lic%ed(MouseEvent): Se invoca despu%s de #ue el usuario pulse sobre el objeto. void #ouseEntered(MouseEvent): Se invoca despu%s de #ue el cursor entre en los lmites del objeto. void #ouseE&ited(MouseEvent): Se invoca despu%s de #ue el cursor salga de los lmites del objeto. void #ouse'ressed(MouseEvent) : Se invoca despu%s de #ue el usuario pulse un botn del ratn mientras el cursor est sobre el objeto void #ouse(eleased(MouseEvent) : Se invoca despu%s de #ue el usuario libere un botn del ratn despu%s de una pulsacin sobre un objeto 9.). $lase MouseEvent *ada m%todo de evento &ouse tiene un slo parmetro: un objeto MouseEvent. La clase MouseEvent deine los siguientes m%todos: int get$lic%$ount()* +evuelve el n'mero de pulsaciones #ue el usuario ha reali$ado (incluyendo este evento). int get+(): ,btiene la posicin del ratn en el eje -. int get,() : ,btiene la posicin del ratn en el eje . 9.-. Eje#plo pr.ctico eventos Mouse /rograma #ue utilice los eventos del &ouse, para imprimir las coordenadas - y . del &ouse. , import ava.a-t..' / import ava.a-t.event..' 0 import avax.s-ing..' 1 public class Eventos2aton extends J#pplet implements "ouse$istener % 3 public void init() % 4 add"ouse$istener(t&is)' + 5 public void mouse(ressed("ouseEvent e) % 6 s&o-7tatus(8"ouse (resionado' 9 de veces: 8; e.getClic<Count();8 en =>8; e.get=() ; 8 en ?>8;e.get?() )' + @ public void mouse2eleased("ouseEvent e) % s&o-7tatus(8"ouse $iberado' 9 de veces: 8 ; e.getClic<Count();8 en =>8; e.get=(); 8 en ?>8;e.get?() )' + ,A public void mouseEntered("ouseEvent e) % ,, s&o-7tatus(8"ouse en pantalla:8; 8 en =>8; e.get=(); 8 en ?>8;e.get?() )' + ,/ public void mouseExited("ouseEvent e) % ,0 s&o-7tatus(8"ouse !uera de pantalla8;8 en =>8; e.get=(); 8 en ?>8;e.get?() )' + ,1 public void mouseClic<ed("ouseEvent e) % ,3 s&o-7tatus(8"ouse pulsado:8 ; 8 en =>8; e.get=(); 8 en ?>8;e.get?() )' + + An.lisis progra#a "/nea 0 1 12* Se deine la interace Mouse"istener, crendose el oidor addMouse"istener en la lnea 0, lo #ue permitir la creacin de cada m%todo de eventos del &ouse. *ada m%todo permitir visuali$ar la operacin reali$ada con el &ouse, como tambi%n la posicin + y , donde ocurri el evento. 3igura 9.1. Ejecucin progra#a Eventos(aton 9.2. Eventos del Teclado !n evento de "eclado ocurre cuando el usuario interact'a con dicho dispositivo. *ada ve$ #ue el usuario presiona o suelta una tecla se genera un evento de teclado. Se tienen dos tipos bsicos de eventos %ey (tecla): la pulsacin de un carcter !nicode, y la pulsacin o liberacin de una tecla del teclado. El primer tipo de llama evento %eytyped, y el segundo son eventos %eypressed y %eyreleased. 9.4. M!todos de Evento 5ey La interace 5ey"istener y su correspondiente clase adaptadora, 5eyAdapter, contienen tres m%todos. void %eyTyped(5eyEvent) : Se invoca despu%s de #ue el usuario teclee un carcter !nicode dentro del objeto escuchado. void %ey'ressed(5eyEvent) * Se invoca despu%s de #ue el usuario pulsa una tecla mientras el objeto escuchado tiene el oco. void %ey(eleased(5eyEvent) : Se invoca despu%s de #ue el usuario libera una tecla mientras el objeto escuchado tiene el oco. 9.0. Eje#plo pr.ctico eventos teclado /rograma #ue utili$ando eventos de teclado verii#ue la tecla #ue ue pulsada por un usuario. , import ava.a-t..' / import ava.a-t.event..' 0 import avax.s-ing..' 1 public class EventosBeclado extends JFrame implements CeD$istener % 3 JBext#rea in!ormacion' 4 JBextField texto' 5 J(anel principal' 6 7tring linea,cadena, codigotecla' @ public EventosBeclado() % ,A super(8Eventos del Beclado8)' ,, Container contenedor>getContent(ane()' ,/ contenedor.set$aDout(ne- Flo-$aDout())' ,0 linea > 7Dstem.get(ropertD(8line.separator8)' ,1 texto>ne- JBextField(/A)' ,3 in!ormacion>ne- JBext#rea(4,/A)' ,4 in!ormacion.setEditable(!alse)' ,5 texto.addCeD$istener(t&is)' ,6 principal>ne- J(anel()' ,@ principal.add(texto)' /A J7croll(ane visuali*acion > ne- J7croll(ane(in!ormacion)' /, contenedor.add(principal, Eorder$aDout.FG2BH)' // contenedor.add(visuali*acion, Eorder$aDout.CEFBE2)' /0 set7i*e(0AA,/AA)' /1 setIisible(true)' + /3 public void <eDBDped(CeDEvent e) % /4 c&ar tecla > e.getCeDC&ar()' /5 int codigo > e.getCeDCode()' /6 i! (C&aracter.isJ7GControl(tecla)) % /@ cadena > 8tecla pulsada > (an unprintable control c&aracter)8' 0A + 0, else % 0/ cadena > 8tecla pulsada > K8 ; tecla ; 8K8' + 00 codigotecla >8Codigo Becla > 8 ; codigo ; 8 (8; CeDEvent.getCeDBext(codigo); 8)8' 01 in!ormacion.append(8EIEFBG CE?B?(EL: 8 ; linea ; 8 8; cadena; linea ; 8 8 ; codigotecla ; linea )' + 03 public void <eD(ressed(CeDEvent e) % 04 c&ar tecla > e.getCeDC&ar()' 05 int codigo > e.getCeDCode()' 06 i! (C&aracter.isJ7GControl(tecla)) % 0@ cadena > 8tecla presionada > (caracter de control no imprimible)8' 1A + 1, else % 1/ cadena > 8tecla presionada > K8 ; tecla ; 8K8' + 11 codigotecla > 8Codigo Becla > 8 ; codigo; 8 (8;CeDEvent.getCeDBext(codigo); 8)8' 13 in!ormacion.append(8EIEFBG CE?(2E77EL: 8; linea ; 8 8; cadena; linea ; 8 8 ; codigotecla; linea)' + 14 public void <eD2eleased(CeDEvent e) % 15 c&ar tecla > e.getCeDC&ar()' 16 int codigo > e.getCeDCode()' 1@ i! (C&aracter.isJ7GControl(tecla)) % 3A cadena > 8Becla liberada > (caracter de control no imprimible)8' 3, + 3/ else % 30 cadena > 8Becla $iberada > K8 ; tecla ; 8K8' + 31 codigotecla > 8Codigo Becla > 8 ; codigo; 8 (8; CeDEvent.getCeDBext(codigo); 8)8' 33 in!ormacion.append(8EIEFBG CE?2E$E#7EL: 8 ; linea ; 8 8; cadena; linea ; 8 8 ; codigotecla; linea)' + 34 public static void main(7tring argsMN) % 36 EventosBeclado ventana > ne- EventosBeclado()' 3@ ventana.setLe!aultCloseGperation(JFrame.E=JBOGFOC$G7E)' + + An.lisis progra#a "/nea 2 1 22* Se deine la interace 5ey"istener, crendose el oidor add5ey"istener en la lnea 12, lo #ue permitir la creacin de cada m%todo de eventos del teclado. *ada m%todo permitir visuali$ar la operacin reali$ada con el teclado: cdigo de la tecla pulsada, el evento asociado, la tecla pulsada, as como el cdigo de la tecla cuando es liberada. 3igura 9.. Ejecucin progra#a EventosTeclado 9.6. Ejercicios propuestos 1. Escriba un programa #ue permita a un usuario dibujar un rectngulo con el &ouse. &uestre en la barra de estado el rea del triangulo, utilice la ormula: 3rea4ancho 5 altura. 6. 7eali$ar un programa #ue permita al usuario escoger las siguientes iguras: valos, arcos, lneas, rectngulos. La igura escogida deber dibujarse y en la barra de estado deber imprimir las coordenadas del &ouse. 8. 9acer un programa #ue permita dibujar una igura por medio del teclado. La igura deber dibujarse al pulsar las siguientes teclas: c dibuja un circulo, o dibuja un ovalo, r dibuja un rectngulo, y l dibuja una lnea. :. +ise;ar un programa #ue permita dibujar una igura. La igura se debe escoger por medio de un cuadro combinado (<*ombobo=), la opcin de relleno por medio de botones de opcin (<*hec>?o=), el color deseado por medio de un <List (lista). @. Elaborar un programa #ue dibuje un cuadrado, *onorme el &ouse se mueva el cuadrado deber dibujarse en la direccin del &ouse. 0. *rear un programa #ue permita escoger una igura, por medio de las teclas: r rellenar la igura, s sin relleno, n color de la igura naranja, o color de la igura rojo, a color de la igura a$ul. 2. 9acer un programa #ue permita al usuario escoger una igura para dibujarse 6A veces en orma aleatoria. B. Escribir un programa #ue muestre colores dierentes en 1A cuadros. El usuario por medio de un <List?o= escoger una igura. *on el &ouse el usuario seleccionar un color y la igura escogida deber cambiar al color escogido. C. +ise;ar un programa #ue permita dibujar con el &ouse. Adems incluya una barra de herramientas #ue permita cambiar lo dibujado por otro color. La barra de herramientas se debe generar con botones de opcin. 1A. Elaborar un programa #ue permita dibujar una igura. *on el &ouse el usuario podr escoger una nueva posicin y la igura deber redibujarse en esta nueva posicin.