Está en la página 1de 28

Universidad Abierta y a Distancia de Mxico.

Carrera: Ingeniera en Desarrollo de Software.



5to. Cuatrimestre


Materia: Programacin Orientada a Objetos 2.

Actividad 2


Nombre del Alumno: Jorge Gonzlez tapia


Objetivo: Se identifican y desarrollan los diferentes tipos de eventos
vistos en la presente unidad.




En Java, cada vez que el usuario interacta con la aplicacin se gatilla un evento, para que una componente
determinada reaccione frente a un evento, debe poseer un "escuchador" (Listener) con, al menos, un mtodo
determinado que se ejecutar al escuchar un evento en particular, por ejemplo, en el siguiente cdigo se crea un
botn que al ser presionado imprime en la salida estndar un mensaje.

JButton boton=new JButton("Un botn");


boton.addActionListener(new ActionListener()
{


public void actionPerformed(ActionEvent e)
{

System.out.println("Apret el Botn");
}


}

Swing puede utilizar una variedad set de eventos, en la siguiente tabla se resumen los ms comunes con sus
respectivos "escuchadores".

Ejemplos de eventos y sus escuchadores
Accin que activa un evento Tipo de escuchador
El usario hace un click, presiona Return
en un rea de texto o selecciona un men
ActionListener(Acciones Sobre
Componentes)
El usuario escoje un frame (ventana
principal)
WindowListener
El usuario hace un click sobre una
componente
MouseListener
El usuario pasa el mouse sobre una
componente
MouseMotionListener
Una componente se hace visible ComponentListener
Una componente adquiere el foco del
teclado
FocusListener
Cambia la seleccin en una lista o tabla ListSelectionListener


Manejo de eventos con AWT (Abstract Windowing Toolkit)

La gestin de eventos a partir de la versin 2 de Java es conocida como modelo de delegacin de eventos, que
define mecanismos coherentes y estndar para generar y procesar eventos. Una fuente genera un evento y lo
enva a uno o ms oyentes o auditores, que han estado simplemente esperando hasta que reciben ese evento, y
una vez recibido lo procesan y lo devuelven.

En un modelo de delegacin de eventos, un auditor (u oyente) tiene que ir acompaado de una fuente para
recibir la notificacin de un evento.

EVENTOS

Un evento es un objeto que describe un cambio de estado en una fuente. Se puede generar como una
consecuencia de que una persona interaccione con los elementos de una interfaz grfica de usuario (GUI, por
sus siglas en ingls). Algunas de las actividades que hacen que se generen eventos son presionar botn, meter
un carcter mediante el teclado, seleccionar un tem (elemento) de una lista, mover las barras de
desplazamiento, y hacer click con el ratn, entre otras muchas cosas.

Puede ocurrir que no se provoque un evento directamente por la interaccin con una interfaz de usuario (UI).
Por ejemplo, se puede generar un evento cuando se termina un cronmetro, cuando un contador pasa de un
cierto valor, cuando hay un fallo de software o de hardware, o cuando se acaba una operacin. Se es libre de
definir los eventos que uno considere mejores para una aplicacin.

Fuentes de evento (source)

Una fuente es un objeto que genera un evento. Esto ocurre cuando cambia de alguna manera el estado interno
de ese objeto. Las fuentes pueden generar ms de un tipo de evento.

Una fuente tiene que ir acompaada de auditores (oyentes (listener)) para que estos reciban notificaciones
sobre el tipo especfico de evento. Cada tipo de evento tiene su propio mtodo de registro. La forma general
es:

public void addTipoListener(TipoListener objeto)

Donde tipo es le nombre del evento y objeto es una referencia al auditor (oyente). Por ejemplo, el mtodo que
registra o acompaa a un oyente de teclado es addKeyListener(). El mtodo que registra o acompaa a un
oyente de movimiento de ratn es addMouseMotionListener(). Cuando ocurre un evento, se notifica a todos
los oyentes registrados, que reciben una copia del objeto evento. Esto es lo que se conoce como multicasting
del evento. En todos los casos, las notificaciones se envan solo a los oyentes que quieren recibirlos.

Algunas fuentes slo permiten registrar un oyente. La forma general del mtodo de registro es:

public void addTipoListener(TipoListener objeto) throws java.util.TooManyListenersException

Cuando se produce el evento, se notifica al oyente que est registrado. Esto es conocido como unicasting del
evento.

Una fuente tambin puede proporcionar un mtodo que permita a un oyente eliminar un registro en un tipo
especfico de evento. La forma general es:

public void removeTypeListener(TypeListener objeto)

Por ejemplo, para borrar un oyente de teclado, se llamara a removeKeyListener().

La fuente que genera eventos es la que proporciona mtodos para aadir o quitar oyentes de eventos del
teclado o del ratn.

La fuente de un evento, a parte de pulsar una tecla del teclado, o el movimiento, arrastre o el pulsar del botn
de ratn, son los componentes de la GUI tales como: botones, listas, campos y reas de texto, barras de
desplazamiento, mens, entre otros. Y como ya se dijo, se detecta el evento de la fuente y se notifica al
receptor (listener).

Auditores (oyentes o escuchas) de eventos (listener)

Un auditor u oyente es un objeto que es avisado cuando ocurre un evento. Tiene dos requisitos principales.
Primero, tiene que ser registrado o ir acompaado por una o ms fuentes para recibir notificaciones sobre los
tipos especficos de eventos. Segundo, tiene que implementar mtodos para recibir y procesar esas
notificaciones.

Los mtodos que reciben y procesan eventos se definen en un conjunto de interfaces que estn en el paquete:
java.awt.event por lo que cada aplicacin que requiera del manejo de eventos tendr que importar a este
paquete.

Como ya se coment, para su registro:

fuente.addEventoListener(TipoEvento); por ejemplo:

boton.addActionListener(this); // en el objeto actual se programa el mtodo actionPerformed(ActionEvent
e){} de la interfaz
// ActionListener, y es donde se programan las acciones que se realizarn
cuando se pulse el
// botn
frame.addWindowListener(new Cerrara); // se asocia a un objeto de la clase Frame, el evento de cerrar
ventan, en la clase cerrar
// se programa ste

Clases de eventos

Como raz en la jerarqua de clases de eventos Java est EventObject, que est en el paquete de java.util. sta
es la superclase para todos los eventos. Su constructor es el siguiente: EventObject(Object src)

Donde src es el objeto que genera ese evento.

EventObject contiene dos mtodos: getSource() y toString(). El primero devuelve la fuente del evento. Su
forma general es: Object getSource(). El segundo, devuelve el String (cadena) correspondiente al evento.

La clase AWTEvent, definida dentro del paquete java.awt, es una subclase de EventObject. sta es la
superclase de todos los eventos basados en AWT utilizados por el modelo de delegacin de eventos. Se puede
usar su mtodo getID() para determinar el tipo de evento. Se escribe de esta manera: int getID()

Existen dos tipos de eventos:
De bajo nivel: representan una entrada de bajo nivel o suceso sobre un componente visual de un sistema de
ventanas sobre la pantalla. Eventos de Java comprendidos en este nivel:
- ComponentEvent
- FocusEvent
- InputEvent
- KeyEvent
- MouseEvent
- ContainerEvent
- WindowEvent

Evento semntico o de alto nivel: encapsula una accin de un componente de la interfaz del usuario. Eventos
de Java comprendidos en este nivel:
- ActionEvent
- AdjustmentEvent
- ItemEvent
- TextEvent



Adaptadores

Cuando en un programa de Java se incluye la implementacin de una interfaz, todos los mtodos que la
conforman debern desarrollarse dentro de ste, pero si alguno de esos mtodos no se necesitan en la
aplicacin, aun as requieren de su implementacin, pero en este caso el cuerpo ir vaco. Las diferentes
interfaces que se ofrecen en Java para la manipulacin de eventos, estn compuestas por ms de un mtodo, y
en ocasiones no se requiere de su implementacin, pero debe cumplir con las reglas establecidas para la
implementacin de las interfaces, por lo que deber de aparecer dentro del programa, pero con el cuerpo vaco
como ya se coment al inicio de este prrafo, Java para facilitarle al usuario la implementacin de eventos, da
otra alternativa, que es implementar clases adaptadoras abstractas, las cuales ya contienen el desarrollo de los
mtodos contenidos en las interfaces implementadas para el manejo de eventos, pero el cuerpo de estos
mtodos estn vacos, por lo que el usuario solo implementar el mtodo que necesitar, un ejemplo lo vimos
en el manejo del cierre de la ventana, en este caso solo se requiere del mtodo windowClosing(), por lo que es
el nico que se reestructura. En la tabla que se localiza mas abajo, se presentan las diferentes clases abstractas
que permiten hacer la captacin de los diferentes eventos que se pueden generar en una aplicacin con GUI.

Podemos generar una clase que herede de una clase adaptadora, en la cual solo implementemos el o los
mtodos que se vayan a utilizar, por ejemplo:

class cerrar extends WindowAdapter
{public void windowClosing(WindowEvent e)
{System.exit(0);}
}

Esta clase habilita el evento de cerrar la ventana.

En la tabla que se presenta a continuacin, se muestran las clases de eventos principales del paquete
java.awt.event

Clase de evento Descripcin
ActionEvent


AdjustmentEvent

ComponentEvent

ContainerEvent

FocusEvent

InputEvent

ItemEvent


Se genera cuando se presiona un botn, se hace doble click en un elemento de una lista, o se selecciona un
elemento de men.

Se genera cuando se manipula una barra de desplazamiento (scrollbar).

Se genera cuando un componente se oculta, se mueve, se cambia de tamao, o se hace visible.

Se genera cuando se aade o se elimina un componente de un contenedor.

Se genera cuando un componente gana o pierde el foco.

Superclase abstracta para cualquier clase de evento de entrada de componente.

Se genera cuando se hace click en un checkbox (caja de verificacin o de seleccin) o en un elemento de una
lista; tambin ocurre cuando se hace una seleccin en una opcin (choice) o cuando se selecciona o
deselecciona un elemento de un men de opciones.

KeyEvent

MouseEvent


MouseWheelEvent

TextEvent

WindowEvent

Se genera cuando se recibe una entrada desde el teclado.

Se genera cuando el ratn se arrastra, se mueve, se hace click, se presiona, o se libera; tambin se genera
cuando el ratn entra o sale de un componente.

Se genera cuando se mueve la rueda del ratn.

Se genera cuando se cambia de valor de un rea de texto o un campo de texto.

Se genera cuando una ventana se activa, se cierra, se desactiva, se minimiza, se abre, o se sale de ella.

A continuacin se presenta una tabla donde se muestra la clasificacin de sucesos, oyentes, mtodos y
componentes

Suceso Oyente Mtodos Componentes


Adaptadores
ActionEvent ActionListener actionPerformed Button
List
MenuItem
TextField


AdjustmentEvent AdjustmentListener adjustmentValueChanged ScrollBar


ComponentEvent ComponentListener componentHidden
componentMoved
componentResized
componentShown
Component

ComponentAdapter
ContainerEvent ContainerListener componentAdded
componentRemoved
Container ContaneirAdapter
FocusEvent FocusListener focusGained
focusLost
Component

FocusAdapter
ItemEvent ItemListener itemStateChanged CheckBox
Choice
List


KeyEvent KeyListener keyPressed
keyReleased
keyTyped
Component

KeyAdapter
MouseEvent MouseListener mouseClicked
mouseEntered
mouseExited
mouseReleased
mousePressed
Component

MouseAdapter
MouseMotionListener mouseDragged
mouseMoved
MouseMotionAdapter
MouseWheelEvent MouseWheelListener mouseWheelMoved Component
TextEvent TextListener textValueChanged TextComponent
WindowEvent WindowListener windowActivated
windowDesactivated
windowOpened
windowClosed
windowClosing
windowIconified
windowDeiconified
Window WindowAdapter

Cabe mencionar, que cada mtodo recibir como parmetro un objeto del tipo de suceso que puede generarse,
por ejemplo:
public void windowClosing(WindowEvent e)
{// cuerpo}

public void mouseClicked(MouseEvent e)
{// cuerpo}

public void mouseMoved(MouseEvent e)
{// cuerpo}

public void keyPressed(KeyEvent e)
{// cuerpo}



Clase ActionEvent

Se genera un objeto evento de la clase ActionEvent cuando se presiona un botn. Se hace doble click en un
elemento de una lista, o se selecciona algo de un men. Esta clase define cuatro constantes enteras que se
pueden utilizar para identificar cualquier modificador asociado con este tipo de evento:
ALT_MASK
CTRL_MASK
META_MASK
SHIFT_MASK

La constante ACTION_PERFORMED puede ser utilizada para identificar eventos de accin.

ActionEvent tiene tres constructores:

ActionEvent(Object src, int tipo, String cmd)
ActionEvent(Object src, int tipo, String cmd, int modificador)
ActionEvent(Object src, int tipo, String cmd, long cuando, int modificador)

Donde src es una referencia al objeto que ha generado ese evento. El tipo de evento se especifica con tipo, y la
cadena corresponde a su comando cmd. El argumento modificador indica qu teclas modificadoras (ALT,
CTRL, META y/o SHIFT) se han presionado cuando se ha generado el evento. El parmetro cuando
especifica cuando se ocurri el evento.

Object getSource() obtiene el nombre del objeto invocado

String getActionCommand () obtiene el nombre del comando del objeto invocado (etiqueta)

int getModifiers() devuelve un valor entero que indica qu tecla modificadora se ha presionado cuando el
evento se ha generado.

long getWhen() devuelve el tiempo en el cual el evento tuvo lugar.

Clase AdjustmentEvent

Se genera un objeto evento de esta clase como resultado de un cambio sobre un scrollbar (barra de
desplazamiento). Hay cinco tipos de eventos de ajuste. Esta clase define cinco constantes enteras que se
pueden utilizar para identificarlos.

BLOCK_DECREMENT

BLOCK_INCREMENT

TRACK

UNIT_DECREMENT

UNIT_INCREMENT
El usuario hace click dentro del srollbar para decrementar un valor

El usuario hace click dentro del srollbar para incrementar su valor

Se arrastra el botn movible del scrollbar

Se ha hecho click en el botn que est al final del scrollbar para decrementar su valor

Se ha hecho click en el botn que est al final del scrollbar para incrementar su valor

Existe otra constante entera, ADJUSTMENT_VALUE_CHANGED, que indica que ha ocurrido un cambio.

Esta clase tiene el siguiente constructor:

AdjustmentEvent(Adjustable src, int id, int tipo, int dato)

Donde src es una referencia al objeto que ha generado ese evento, el id es igual a
ADJUSTMENT_VALUE_CHANGED, el tipo de evento se especifica por tipo, y su dato asociado es dato.

Adjustable getAdjustable() mtodo que devuelve el objeto que ha generado el evento.

int getAdjustmentType() mtodo que devuelve una de las constantes definidas por AdjustmentEvent, que
indica el tipo de ajuste generado.

int getValue() mtodo que devuelve la cantidad de ajuste, por ejemplo cuando se manipula un scrollbar,
este mtodo devuelve el valor representado por ese cambio.

Clase ComponentEvent

Se genera un objeto evento de esta clase cuando cambia el tamao, posicin o visibilidad de un componente.
Hay cuatro tipos de eventos generados por un componente. Se definen cuatro constantes enteras que se
pueden utilizar para identificarlos:

COMPONENT_HIDDEN

COMPONENT_MOVED

COMPONENT_RESIZED

COMPONENT_SHOWN
Se ha ocultado el componente.

Se ha movido el componente.

Se ha cambiado el tamao del componente.

El componente se ha hecho visible.

ComponentEvent(Component src, int tipo) constructor de la clase

Donde src es una referencia al objeto que ha generado el evento. El tipo del evento se especifica a travs de
tipo.

ComponentEvent es la superclase de ContainerEvent, FocusEvent, KeyEvent, MouseEvent, y WindowEvent.

Component getComponent() mtodo que devuelve el componente que ha generado el evento.

Clase ContainerEvent

Se genera un objeto evento de esta clase cuando se aade o se borra un componente desde un contenedor. Hay
dos tipos de eventos generados por un contenedor, y que son definidos a travs de dos constantes enteras:
COMPONENT_ADDED y COMPONENT_REMOVED. stas indican que se ha aadido o se ha borrado,
respectivamente, un componente desde el contenedor. Esta clase es una subclase de ComponentEvent.

ContainerEvent(Component src, int tipo, Component comp) mtodo constructor, donde src es una
referencia al contenedor que genera ese evento, el tipo de evento es especificado por tipo, y el componente
que se ha aadido o borrado por comp.

Container getContainer() mtodo que permite obtener una referencia al contenedor que ha generado el
evento.

Component getChild() mtodo que devuelve una referencia al componente que se ha aadido o se ha
borrado desde el contenedor.

Clase FocusEvent

Se genera un objeto evento de esta clase cuando un componente est o deja de estar activo. Estos eventos se
identifican mediante las constantes enteras: FOCUS_GAINED y FOCUS_LOST. Esta clase es una subclase
de ComponentEvent.

Constructores:
FocusEvent(Component src, int tipo)
FocusEvent(Component src, int tipo, boolean bandera_temporal)
FocusEvent(Component src, int tipo, boolean bandera_temporal, Component otro)

Donde src es una referencia al componente que ha generado ese evento. El tipo del evento es especificado por
tipo. El argumento bandera_temporal es puesto en true si el evento foco es temporal, en cualquier otro caso se
pone en false. Un evento foco temporal se produce como resultado de otra operacin de UI. Por ejemplo,
supongamos que lo que est activo tiene el foco- es un campo de texto. Si el usuario mueve el ratn para
modificar un scrollbar, se pierde temporalmente el foco.

El otro componente envuelto en los cambios de foco, llamado el componente opuesto, se pasa en el
argumento otro. Por lo tanto, si un evento FOCUS_GAINED ocurre, otro har referencia al componente que
perdi el foco. Si un evento FOCUS_LOST ocurre, otro har una referencia al componente que obtuvo el
foco.

Component getOppositeComponent() este mtodo devuelve el componente otro.

boolean isTemporary() mtodo que indica si este cambio de foco es temporal. Regresa true si el cambio es
temporal, en caso contrario, regresa false.

Clase InputEvent

Clase abstracta que es superclase para los eventos de entrada de componentes, y a su vez es una subclase de
ComponentEvent. Sus subclases son KeyEvent y MouseEvent.

InputEvent define ocho constantes enteras, que se pueden utilizar para obtener informacin sobre cualquier
modificador asociado con el evento:
ALT_MASK
ALT_GRAPH_MASK
BUTTON1_MASK
BUTTON2_MASK
BUTTON3_MASK
CTRL_MASK
META_MASK
SHIFT_MASK

Dado que generaba conflictos entre los modificadores (constantes) utilizados por eventos de teclado y de
ratn con otros eventos, se hizo una extensin de estas constantes:

ALT_DOWN_MASK
ALT_GRAPH_DOWN_MASK
BUTTON1_DOWN_MASK
BUTTON2_DOWN_MASK
BUTTON3_DOWN_MASK
CTRL_DOWN_MASK
META_DOWN_MASK
SHIFT_DOWN_MASK

Los mtodos que vienen a continuacin se utilizan para cuando se desea verificar si un modificador fue
presionado en el momento en que un evento se genera:

boolean isAltDown()
boolean isAltGraphDown()
boolean isControlDown()
boolean isMetaDown()
boolean isShiftDown()

comprueban si esos modificadores se han presionado al mismo tiempo que se ha generado el evento.

int getModifiers() mtodo que devuelve un valor que contiene todas las etiquetas de los modificadores
para ese evento.

int getModifiersEx() mtodo que devuelve un valor que contiene todas las etiquetas de los modificadores
extendidos para ese evento.

Clase ItemEvent

Se genera un objeto evento de esta clase cuando se hace click en un checkbox o en un elemento de una lista o
cuando se selecciona o se deselecciona un elemento de un men de opciones. Hay dos tipos de eventos de
elementos, que se identifican por las siguientes constantes enteras:

DESELECTED

SELECTED
El usuario deselecciona un elemento.

El usuario selecciona un elemento.

Adems se define una constante entera ITEM_STATE_CHANGED, que significa un cambio de estado.

ItemEvent(ItemSelectable src, int tipo, Object entrada, int estado) mtodo constructor de la clase, donde
src es una referencia al componente que ha generado ese evento, el tipo de elemento es especificado por tipo,
lo que especficamente genera le evento es pasado entrada y el estado actual del elemento con estado.

Object getItem() este mtodo se puede utilizar para obtener una referencia al elemento que ha generado
un evento.

ItemSelectable getItemSelectable() mtodo que se puede utilizar para obtener una referencia al objeto
ItemSelectable que ha generado un evento.

Las listas (List) y las listas desplegables (Choice) son ejemplos de elementos de UI que implementan la
interfaz ItemSelectable.

int getStateChange() mtodo que devuelve el cambio de estado (por ejemplo, SELECTED o
DESELECTED) para el evento.

Clase KeyEvent

Se genera un objeto evento de esta clase cuando se pulsa una tecla. Hay tres clases de eventos de teclado, que
estn definidos por las constantes enteras: KEY_PRESSED, KEY_RELEASED y KEY_TYPED. Los
primeros dos eventos se generan cuando se presiona o se libera cualquier tecla. El tercer evento slo se da
cuando se genera un carcter.

KeyEvent define otras constantes enteras, por ejemplo, VK_0 a VK_9 y VK_A a VK_Z definen los caracteres
ASCII equivalente de nmeros y letras maysculas. VK_F1 a VK_24 teclas de funciones, VK_NUMPAD0 a
VK_NUMPAD9, las teclas numricas. Algunas otras constantes son
(http://java.sun.com/javase/6/docs/api/index.html):

VK_ENTER
VK_DOWN
VK_LEFT
VK_RIGHT
VK_UP
VK_PAGE_UP
VK_PAGE_DOWN
VK_ESCAPE
VK_SHIFT
VK_CANCEL
VK_ALT
VK_CONTROL
VK_AMPERSAND
VK_ASTERISK
VK_AT (@)
VK_SPACE
VK_BEGIN
VK_END
VK_BACK_SLASH (\)
VK_BACK_SPACE
VK_SLASH (/)
VK_CAPS_LOCK
VK_NUM_LOCK
VK_CIRCUMPLEX (^)
VK_EQUALS (=)
VK_INSERT
VK_NUMBER_SIGN (#)
VK_OPEN_BRACKET ( [ )
VK_CLOSE_BRACKET ( ] )
VK_COLON (:)
VK_COMMA (,)
VK_PERIOD (.)
VK_SEMICOLON(;)
VK_LEFT_PARENTHESIS
VK_RIGHT_PARENTHESIS
VK_PRINTSCREEN

Las constantes VK especifican cdigos de teclas virtuales y son independientes de cualquier modificador,
como control, shift o alt.

KeyEvent es una subclase InputEvent.

Constructores:
KeyEvent(Component src, int tipo, long when, int modificador, int code)
KeyEvent(Component src, int tipo, long when, int modificador, int code, char ch)

Donde src es la referencia al componente que genera el evento, el tipo de evento est referenciado por tipo, el
momento en que se ha presionado la tecla se pasa con when, los argumentos modificador indican qu
modificador se ha presionado cuando ha ocurrido ese evento del teclado, el cdigo de tecla virtual, como
VK_UP, VK_A, y as sucesivamente, se pasa con code. El carcter equivalente (si existe alguno) se pasa con
ch. Si no existe ningn carcter vlido, entonces ch contienen a CHAR_UNDEFINED. Para los eventos
KEY_TYPED, conde contendr a VK_UNDEFINED.

Esta clase tiene varios mtodos definidos pero los ms usuales son:
char getKeyChar() que devuelve el carcter que se ha tecleado

int getKeyCode() que devuelve el cdigo de la tecla

Si no hay disponible carcter vlido alguno, getKeyChar() devuelve CHAR_UNDEFINED. Cuando se
produce un evento KEY_TYPED, getKeyCode() devuelve VK_UNDEFINED.

Clase MouseEvent

Hay ocho eventos de ratn. Esta clase define las siguientes constantes enteras, que se pueden utilizar para
identificarlos:

MOUSE_CLICKED

MOUSE_DRAGGED
El usuario hace click con el ratn.

El usuario arrastra el ratn.

MOUSE_ENTERED

MOUSE_EXITED

MOUSE_MOVED

MOUSE_PRESSED

MOUSE_RELEASED

MOUSE_WHEEL

El ratn mete un componente.

El ratn sale de un componente.

Se mueve el ratn.

Se presiona el ratn.

Se libera el ratn

La rueda del ratn fue movida

MouseEvent es una subclase de InputEvent

MouseEvent(Componet scr, int tipo, long when, int modificador, int x, int y, int clicks, boolean
triggersPopup)

Donde src es la referencia al componente que genera el evento, el tipo de evento est referenciado por tipo, el
momento en que se ha presionado la tecla se pasa con when, el argumento modificador indica qu
modificador se ha presionado cuando ha ocurrido un evento del ratn, las coordenadas del ratn se pasan con
x e y, el nmero de clicks se pasa con clicks, el atributo triggersPopup indica si ese evento hace que aparezca
un men en esa plataforma.

int getX() Devuelve la coordenada de x el ratn cuando ha ocurrido el evento.

int getY() Devuelve la coordenada de y el ratn cuando ha ocurrido el evento.

Point getPoint() obtiene las coordenadas del ratn, pero en este caso las almacena en un objeto de la clase
Point.

void translatePoint(int x, int y) traduce la posicin del evento. Los valores de x e y se aaden a las
coordenadas del evento.

int getClickCount() da el nmero de clicks que han hecho con el ratn para ese evento.

boolean isPopupTrigger() prueba si el evento ha hecho aparecer un men en la plataforma.

int getButton() devuelve el valor que representa el botn que causa el evento. El valor devuelto ser una de
las constantes definidas por MouseEvent: NOBUTTON, BUTTON1, BUTTON2, BUTTON3

NOBUTTON indica que no hay botn presente o liberado.

Point getLocationOnScreen() devuelve un objeto Point que contiene las dos coordenadas X y Y, stas
sern relativas a la pantalla y no al componente.

int getXOnScreen() devuelve la coordenada X, sta ser relativa a la pantalla y no al componente.

int getYOnScreen() devuelve la coordenada Y, sta ser relativa a la pantalla y no al componente.

Clase MouseWheelEvent

Esta clase encapsula un evento de la rueda del ratn. Es una subclase de MouseEvent. Define dos constantes
enteras:

WHEEL_BLOCK_SCROLL Un evento de pgina arriba o pgina abajo ocurri

WHEEL_UNIT_SCROLL

Un evento de lnea arriba o lnea abajo ocurri

MouseWheelEvent(Component src, int tipo, long when, int modificadores, int x, int y, int clics, boolean t, int
sc, int monto, int cuenta) uno de los mtodos constructores, donde src es una regencia al objeto que genera
el evento, el tipo de evento se especifica en tipo, la hora en que el evento del ratn ocurri se pasa en when,
el argumento modificadores indica cuales modificadores fueron activados cuando el evento ocurri. Las
coordenadas del ratn se pasan a travs de x y y, el nmero de clicks que la rueda ha rotado se pasa mediante
clics, t es una bandera que indica si ese evento causa que un men popup (emergente) aparezca en esta
plataforma. El valor sc debe ser WHEEL_BLOCK_SCROLL o WHEEL_UNIT_SCROLL. El nmero de
unidades de scroll es pasado en monto, cuanta indica el nmero de rotaciones en que la rueda se movio.

int getWheelRotation() mtodo que regresa el nmero de unidades rotacionales. Si el valor es positivo, la
rueda se movi en contra de las manecillas del reloj, y si es negativo, la rueda se movi en el sentido de las
manecillas del reloj.

int getScrollType() devuelve WHEEL_BLOCK_SCROLL o WHEEL_UNIT_SCROLL. Si el tipo es
WHEEL_UNIT_SCROLL, se puede obtener el nmero de unidades de scroll llamando al mtodo:
int getScrollAmount()

Clase TextEvent

Se genera mediante campos de texto y reas de texto cuando el usuario o el programa introducen caracteres.
Se define la contante entera TEXT_VALUE_CHANGED.

TextEvent(Object src, int tipo) donde src es la referencia al componente que genera el evento, el tipo de
evento est referenciado por tipo.

El objeto TextEvent no incluye los caracteres que ya estn en el componente de texto que ha generado el
evento, sino que el programa es el que tiene que utilizar otros mtodos asociados con el componente de texto
para recuperar la informacin.

Clase WindowEvent

Hay diez tipos de eventos de ventanas. Se definen constantes enteras que se pueden utilizar para
identificarlos:

WINDOW_ACTIVATED

WINDOW_CLOSED

WINDOW_CLOSING

WINDOW_DEACTIVATED

WINDOW_DEICONIFIED

WINDOW_GAINED_FOCUS

WINDOW_ICONIFIED

WINDOW_LOST_FOCUS

WINDOW_OPENED

Se ha activado la ventana.

Se ha cerrado la ventana.

El usuario ha pedido que se cierre la ventana.

La ventana ha dejado de estar activa.

Se ha mostrado la ventana tras pulsar su icono.

La ventana ahora est en foco de entrada.

Se ha minimizado la ventana a un icono.

La ventana ha perdido el foco de entrada.

Se ha abierto la ventana.

WINDOW_STATE_CHANGED El estado de la ventana ha cambiado.

WindowEvent es una subclase de ComponentEvent.

Constructores:
WindowEvent(Window src, int tipo) // ste es el ms bsico
WindowEvent(Window src, int tipo, Window otro)
WindowEvent(Window src, int tipo, Window otro, int deEstado, int aEstado)

Donde src es la referencia al componente que genera el evento, el tipo de evento est referenciado por tipo,
otro especifica la ventana opuesta cuando un evento de foco o activacin ocurre. El parmetro deEstado
especifica el estado anterior de la ventana, y aEstado el nuevo estado que tendr cuando un cambio de estado
de ventana ocurre.

Window getWindow() devuelve el objeto Window que ha generado el evento.

Window getOppositeWindow() devuelve la ventana contraria (cuando un evento de foco o activacin ha
ocurrido).

int getOldState() devuelve el estado anterior de la ventana.

int getNewState() devuelve el estado actual de la ventana.

Ejemplos de componentes que pueden generar eventos

Origen de evento Descripcin
Button

Checbox

Choice

List


MenuItem


Scrollbar

TextComponent

Window

Genera eventos de accin (ActionEvent) cuando se presiona el botn.

Genera eventos de elemento (ItemEven) cuando se selecciona o deselecciona un checkbox.

Genera eventos de elemento (ItemEven) cuando se cambia una opcin (choice).

Genera eventos de accin (ActionEvent) cuando se hace doble click sobre un elemento; genera eventos de
elemento (ItemEvent) cuando se selecciona o se deselecciona un elemento.

Genera eventos de accin (ActionEvent) cuando se selecciona un elemento de men; genera eventos de
elemento (ItemEvent) cuando se selecciona o deselecciona un elemento de un men de opciones.

Genera eventos de ajuste (AdjustmentEvent) cuando se manipula el scrollbar.

Genera eventos de texto (TextEvent) cuando el usuario introduce un carcter.

Genera eventos de ventana (WindowEvent) cuando una ventana se activa, se cierra, se desactiva, se
minimiza, se maximiza, se abre o se sale de ella.

Interfaces de auditores (listener) de eventos

En la tabla que se presenta a continuacin, se muestran las interfaces listener (auditor, oyente) principales del
paquete java.awt.event

Oyente (listener) Descripcin Mtodos
ActionListener Define un mtodo para recibir eventos de accin. actionPerformed(ActionEvent e)
AdjustmentListener Define un mtodo para recibir eventos de ajuste. adjustmentValueChanged (AdjustmentEvent e)
ComponentListener Define cuatro mtodos para reconocer cundo se
oculta, se mueve, se cambia de tamao o se muestra
un componente.
componentHidden(ComponentEvent e)
componentMoved(ComponentEvent e)
componentResized(ComponentEvent e)
componentShown(ComponentEvent e)
ContainerListener Define dos mtodos para reconocer cundo se aade
o se elimina un componente de un contenedor.
componentAdded(ContainerEvent e)
componentRemoved(ContainerEvent e)
FocusListener Define dos mtodos para reconocer cundo un
componente gana o pierde el foco del teclado.
focusGained(FocusEvent e)
focusLost(FocusEvent e)
ItemListener Define un mtodo para reconocer cundo cambia de
estado un elemento.
itemStateChanged(ItemEvent e)
KeyListener Define tres mtodos para reconocer cundo se
presiona, se libera o se golpea una tecla.
keyPressed(KeyEvent e)
keyReleased(KeyEvent e)
keyTyped(KeyEvent e)
MouseListener Define cinco mtodos para reconocer cundo se
presiona o libera un botn del ratn, se hace clic con
l, o el ratn entra en un componente o sale de l
mouseClicked(MouseEvent e)
mouseEntered(MouseEvent e)
mouseExited(MouseEvent e)
mouseReleased(MouseEvent e)
mousePressed(MouseEvent e)
MouseMotionListener Define dos mtodos para reconocer cundo se
arrastra o se mueve el ratn.
mouseDragged(MouseEvent e)
mouseMoved(MouseEvent e)
MouseWheelListener Define un mtodo para reconocer cundo la rueda del
ratn se mueve.
mouseWheelMoved(MouseWheelEvent e)
TextListener Define un mtodo para reconocer cundo cambia un
valor de texto.
textValueChanged(TextEvent e)
WindowFocusListener Define dos mtodos para reconocer cundo una
ventana gana o pierde foco de entrada.
windowGainedFocus (WindowEvent e)
windowLostFocus(WindowEvent e)
WindowListener Define siete mtodos para reconocer cundo una
ventana se activa, se cierra, se desactiva, se
minimiza, se maximiza, se abre o se sale de ella.
windowActivated(WindowEvent e)
windowDesactivated(WindowEvent e)
windowOpened(WindowEvent e)
windowClosed(WindowEvent e)
windowClosing(WindowEvent e)
windowIconified(WindowEvent e)
windowDeiconified(WindowEvent e)

Ejemplos:

eventos del ratn

La clase EventosRaton hereda de la clase Frame e implementa los mtodos de las interfaces:
MouseListener, MouseMotionListener. Lo nico que hace es mostrar en una etiqueta los
diferentes eventos del ratn y la posicin de ste.

import java.awt.*;
import java.awt.event.*; // se importa el paquete para el manejo de eventos

public class EventosRaton extends Frame implements MouseListener, MouseMotionListener
{ Label edo; // declara un objeto de la clase Label (etiqueta)

public EventosRaton() // mtodo constructor
{super ("ejemplo de eventos del raton"); // llama a la superclase (Frame) y pone titulo al Frame
edo=new Label(); // crea el objeto edo, que es una instancia de la clase Label (etiqueta)
add(edo,BorderLayout.SOUTH); // aade la etiqueta al Frame
addMouseListener(this); // activa el escucha de los eventos del raton
addMouseMotionListener(this); // activa el escucha de los eventos del raton
setSize(600,600); // tamao del Frame
setVisible(true); // hace visible al Frame
}

// mtodos que estn contenidos en la interface MouseListener, invocados por el mtodo escucha
// addMouseListener(this);
// e.getX(),e.getY(), obtienen las coordenadas del raton

public void mouseClicked(MouseEvent e)
{ edo.setText("click "+e.getX()+","+e.getY()); }

public void mousePressed(MouseEvent e)
{ edo.setText("presiono "+e.getX()+","+e.getY()); }

public void mouseReleased(MouseEvent e)
{ edo.setText("suelto "+e.getX()+","+e.getY()); }

public void mouseEntered(MouseEvent e)
{ edo.setText("entro "+e.getX()+","+e.getY()); }

public void mouseExited(MouseEvent e)
{ edo.setText("salgo "+e.getX()+","+e.getY()); }

// mtodos que estn contenidos en la interface MouseMotionListener, invocados por el mtodo
escucha
// addMouseMotionListener(this);
public void mouseDragged(MouseEvent e)
{ edo.setText("arrastro "+e.getX()+","+e.getY()); }

public void mouseMoved(MouseEvent e)
{ edo.setText("muevo "+e.getX()+","+e.getY()); }

public static void main (String arg[])
{EventosRaton er=new EventosRaton();
er.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e)
{System.exit(0);} });
}
}

Este es el mismo ejemplo anterior, pero le agregue algunas cosas, como por ejemplo, que cambie
de color el fondo segn el evento generado, y que cuando se arrastre el ratn lo siga la cadena H
o o o o l a ! ! !

import java.awt.*;
import java.awt.event.*;
public class EventosRaton2 extends Frame implements MouseListener, MouseMotionListener
{ Label edo;
int x, y;

public EventosRaton2()
{super ("ejemplo de eventos del raton");
edo=new Label();
add(edo,BorderLayout.SOUTH);
addMouseListener(this);
addMouseMotionListener(this);
setSize(600,600);
setVisible(true);
x=y=0;
}
// con el metodo setBackground() cambio de color las areas libres del Frame
public void mouseClicked(MouseEvent e)
{ edo.setText("click"+e.getX()+","+e.getY());setBackground(Color.pink); }

public void mousePressed(MouseEvent e)
{ edo.setText("presiono"+e.getX()+","+e.getY());setBackground(Color.red); }

public void mouseReleased(MouseEvent e)
{ edo.setText("suelto"+e.getX()+","+e.getY());setBackground(Color.blue); }

public void mouseEntered(MouseEvent e)
{ edo.setText("entro"+e.getX()+","+e.getY());setBackground(Color.black); }

public void mouseExited(MouseEvent e)
{ edo.setText("salgo"+e.getX()+","+e.getY());setBackground(Color.yellow); }

public void mouseDragged(MouseEvent e)
{ edo.setText("arrastro"+(x=e.getX())+","+(y=e.getY()));setBackground(Color.green);
repaint();
}

public void mouseMoved(MouseEvent e)
{ edo.setText("muevo"+e.getX()+","+e.getY());setBackground(Color.gray); }

public void paint(Graphics g)
{g.drawString("H o o o o l a ! ! !",x,y);
}

public static void main (String arg[])
{EventosRaton2 er=new EventosRaton2();
er.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e)
{System.exit(0);} });
}
}

Pueden crear la clase siguiente, y solo generar un objeto de ella en las aplicaciones y ya tienen
incorporado el evento para cerrar la ventana grfica.

import java.awt.event.*;

public class CerrarVentana extends WindowAdapter
{public void windowClosing(WindowEvent e)
{System.exit(0);}
}

El ejemplo que se muestra a continuacin es un applet, en el cual cada vez que arrastramos el
raton se dibuja una lnea, y una vez que terminado de hacerlo, desaparece sta. En este ejemplo
se crea un objeto annimo de la clase CerrarVentana, adems de implementar el mtodo main()
para que la clase se comporte tanto como un applet como una aplicacin independiente.

import java.awt.*;
import java.applet.*;
import java.awt.event.*;

public class Linea extends Applet implements MouseListener, MouseMotionListener
{int x1=0, y1=0;
int x2=0, y2=0;
boolean draw;

public void init() // si se tratara de una clase que hereda de clase Frame y no de Applet, ste sera
el mtodo constructor
{addMouseListener(this);
addMouseMotionListener(this);
draw=false;
}

// los mtodos que vienen a continuacin, quedan con el cuerpo vaco ya que no se utilizaran en
esta aplicacin, pero como
// indicamos en la clase que se va a implementar las interfaces MouseListener y
MouseMotionListener, es necesario
// implementar los mtodos correspondientes a cada interface, se necesiten o no en la aplicacin,
si no se necesitan quedan
// con el cuerpo vaco como los casos siguientes:

// mtodos de la interface MouseListener

public void mouseEntered(MouseEvent e){}

public void mouseExited(MouseEvent e){}

public void mouseClicked(MouseEvent e){}

public void mousePressed(MouseEvent e)
{x2=e.getX();
y2=e.getY();
draw=true;
}

public void mouseReleased(MouseEvent e)
{draw=false;}

// interface MouseMotionListener, sta contiene solo dos mtodos, los cuales si se utilizarn en
este ejemplo, por lo tanto
// el cuerpo no estar vaco

public void mouseDragged(MouseEvent e)
{x1=e.getX();
y1=e.getY();
repaint();
}

public void mouseMoved(MouseEvent e)
{showStatus("Moviendo mouse en: "+e.getX()+","+e.getY());}

public void paint(Graphics g)
{if (draw) {g.drawLine(x1,y1,x2,y2);}
}

// opcional, ya que es un applet, se pone esto si quieren que se ejecute tambin como una
aplicacin.

public static void main (String arg[])
{Frame f=new Frame("Otro ejemplo de eventos de raton");
Linea linea=new Linea();
f.add(linea);
linea.init();
f.addWindowListener(new CerrarVentana()); // se crea un objeto annimo de la clase
CerrarVentana
f.setSize(600,600);
f.setVisible(true);
}
}

Cdigo de la pgina html
<html>
<applet code=Linea.class width=600 height=600>
</applet>
</html>

Mismo ejemplo que el anterior, la diferencia es que en ste se implementan los dos mtodos de la
interface MouseMotionListener y en lugar de implementar los mtodos de la interface
MouseListener, se implementan solo los mtodos necesarios haciendo uso de la clase abstracta
MouseAdapter, mtodos a iplementar: mousePressed(), mouseReleased().

import java.awt.*;
import java.applet.*;
import java.awt.event.*;
public class LineaVer2 extends Applet implements MouseMotionListener
{int x1=0, y1=0;
int x2=0, y2=0;
boolean draw;

public void init()
{addMouseListener(new MouseAdapter() // se implementan los mtodos de la clase abstracta
MouseAdapter
{ public void mousePressed(MouseEvent e)
{x2=e.getX();
y2=e.getY();
draw=true;
}
public void mouseReleased(MouseEvent e)
{draw=false;}
}
);
addMouseMotionListener(this);
draw=false;
}

//mtodos de la interface MouseMotionListener
public void mouseDragged(MouseEvent e)
{x1=e.getX();
y1=e.getY();
repaint();
}

public void mouseMoved(MouseEvent e)
{showStatus("Moviendo mouse en: "+e.getX()+","+e.getY());}

public void paint(Graphics g)
{if (draw) {g.drawLine(x1,y1,x2,y2);}
}

// opcional, ya que es un applet, se pone esto si quieren que se ejecute tambin como una
aplicacin.

public static void main(String arg[])
{Frame f=new Frame();
LineaVer2 linea=new LineaVer2();
f.add(linea);
linea.init();
f.setSize(600,600);
f.setVisible(true);
f.addWindowListener(new CerrarVentana());
}
}

Pgina html para este ejemplo:
<html>
<applet code="LineaVer2.class" width=600 height=600>
</applet>
</html>

Clase Point
Hace referencia a la localizacin de un punto grfico (pixel), contiene dos valores de acceso
pblico x e y.

Mtodos constructores:
new Point();
new Point(int x, int y);
new Point(new (Point p));

Variables de instancia:
int x;
int y;

Point p=new Point();
p.x
p.y

algunos mtodos:
Point punto=new Point();

boolean punto.equals(Point p); // compara dos puntos
punto.move(int x, int y); // mueve el punto a otra posicin
punto.setLocation(Point p);
punto.setLocation(int x, int y); // colocar el punto en otra posicin
punto, translate(int dx, int dy); // cambia las coordenadas del punto mediante la adicin de dx y
dy a sus coordenadas x e y,
// respectivamente.

Clase Dimension
Contienen dos valores de acceso pblico, width y height

Mtodos constructors:
new Dimension();
new Dimension(int width, int height);
new Dimension(Dimension d);

Variables de instancia:
int width;
int height;

algunos mtodos:
Dimension dim=new Dimension();
boolean dim.equals(Dimension d);
dim.setSize(Dimension d);
dim.setSize(int width, int height); //ajusta los valores de altura y anchura del objeto a los
especificados

Ejemplo de la clase Point

Se crea una clase que hereda todas las caractersticas y atributos de la clase Frame, en este
ejemplo se hace uso del evento del ratn arrastrar ratn (mouseDragged), y de la incorporacin
de una etiqueta (componente) haciendo uso de la clase Label. El Frame tiene por definicin del
administrador BorderLayout, el cual divide la ventana en cinco reas: Norte, Sur, Este, Oeste, y
Centro, por lo que cuando se va a incorporar un componente, administrador o contenedor se le
tendr que indicar en que parte ubicarlo, para este caso se le indica que la etiqueta la coloque en
la parte sur (add(new Label("arrastrar el raton para dibujar"),BorderLayout.SOUTH);), el manejo
del evento del ratn, se programa a travs de la clase abstracta MouseMotionAdapter, la cual
solo permite redisear los mtodos que se utilizarn en la aplicacin, a diferencia de que si se
hubiese hecho con la interfaz MouseMotionListener.

// este programa permite dibuja, para ello hay que arrastrar el ratn, una vez que agotamos los
// puntos permitidos, deja de dibujar el raton.

import java.awt.*;
import java.awt.event.*; // importa el paquete para el manejo de eventos

public class Pintar extends Frame
{ int contador=0;
Point [] p=new Point[1000]; // se establece la cantidad maxima de puntos a dibujar

public Pintar() // mtodo constructor, si se tratar de un applet, este seria el mtodo init()
{super ("Pizarra de dibujo electronica"); // llama a la super clase (Frame) y pone titulo al frame
add(new Label("arrastrar el raton para dibujar"),BorderLayout.SOUTH); // incorpora la etiqueta
al Frame
addMouseMotionListener( new MouseMotionAdapter() // se programa la captura del evento
del ratn
{ public void mouseDragged(MouseEvent e)
//cada vez que se arrastra el raton se va obteniendo la coordenada para despues dibujar ese
punto
{ if (contador<p.length)
{ p[contador]=e.getPoint();
contador++;
repaint();
}
}
}
);
setSize(600,600); // se establece el tamao del Frame
setVisible(true); // se establece que el Frame sea visible, si se enva false como argumento, no
se visualiza el Frame
}
public void paint(Graphics g)
{ super.paint(g); // se llama al metodo paint de la superclase
for(int i=0;i<p.length && p[i]!=null;i++)
{g.fillOval(p[i].x,p[i].y,4,4);}
}
public static void main (String arg[])
{Pintar pizarra=new Pintar();
pizarra.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent
e){System.exit(0);}});
}
}

Ejemplos de eventos del teclado

El siguiente applet, muestra en la barra de estado, cuando se presiona o se suelta una tecla:

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class teclas1 extends Applet implements KeyListener
{String msg="";
int x=10,y=20;
public void init()
{addKeyListener(this);
requestFocus();
}
public void keyPressed(KeyEvent e)
{showStatus("se presiono una tecla");}
public void keyReleased(KeyEvent e)
{showStatus("se solto una tecla");}
public void keyTyped(KeyEvent e)
{msg+=e.getKeyChar();
repaint();
}
public void paint(Graphics g)
{g.drawString(msg,x,y);}
}

Pgina html para este ejemplo:
/*
<html>
<applet code="teclas1.class" width=300 height=300>
</applet>
</html>
*/

El siguiente applet presenta un mensaje correspondiente a la tecla presionada

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
public class teclas2 extends Applet implements KeyListener
{String msg="";
int x=10,y=20;
public void init()
{addKeyListener(this);
requestFocus();
}
public void keyPressed(KeyEvent e)
{showStatus("se presiono una tecla");
switch(e.getKeyCode())
{case KeyEvent.VK_F1:msg+=" F1 ";break;
case KeyEvent.VK_F3:msg+=" F3 ";break;
case KeyEvent.VK_F5:msg+=" F5 ";break;
case KeyEvent.VK_PAGE_DOWN:msg+=" abajo ";break;
case KeyEvent.VK_PAGE_UP:msg+=" arriba ";break;
case KeyEvent.VK_LEFT:msg+=" flecha izq ";break;
case KeyEvent.VK_RIGHT:msg+=" flecha der ";break;
}
repaint();
}
public void keyReleased(KeyEvent e)
{showStatus("se solto una tecla");}
public void keyTyped(KeyEvent e)
{msg+=e.getKeyChar();
repaint();
}
public void paint(Graphics g)
{g.drawString(msg,x,y);}
}

Pgina del ejemplo anterior.
/*
<html>
<applet code="teclas2.class" width=300 height=300>
</applet>
</html>
*/

También podría gustarte