Está en la página 1de 7

9.

Manejo de eventos (Mouse y Teclado)


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.

También podría gustarte