Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Unidad IV
Tpico selectos de programacin
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.
Pgina 1
31/01/2015
Manejo de eventos
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).
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
Pgina 2
31/01/2015
Manejo de eventos
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
ActionEvent
Descripcin
Se genera cuando se presiona un botn, se hace doble click en un elemento de una lista, o se selecciona un
elemento de men.
AdjustmentEvent
ComponentEvent
ContainerEvent
FocusEvent
InputEvent
ItemEvent
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
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.
MouseWheelEvent
TextEvent
WindowEvent
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
Pgina 3
31/01/2015
Manejo de eventos
Suceso
Oyente
Mtodos
Componentes
ActionEvent
ActionListener
actionPerformed
Button
List
MenuItem
TextField
AdjustmentEvent
AdjustmentListener
adjustmentValueChanged
ScrollBar
ComponentEvent
ComponentListener
Component
ComponentAdapter
ContainerEvent
ContainerListener
Container
ContaneirAdapter
FocusEvent
FocusListener
Component
FocusAdapter
ItemEvent
ItemListener
componentHidden
componentMoved
componentResized
componentShown
componentAdded
componentRemoved
focusGained
focusLost
itemStateChanged
KeyEvent
KeyListener
Component
KeyAdapter
MouseEvent
MouseListener
keyPressed
keyReleased
keyTyped
mouseClicked
mouseEntered
mouseExited
mouseReleased
mousePressed
mouseDragged
mouseMoved
mouseWheelMoved
textValueChanged
windowActivated
windowDesactivated
windowOpened
windowClosed
windowClosing
windowIconified
windowDeiconified
Component
MouseAdapter
MouseMotionListener
MouseWheelEvent
TextEvent
WindowEvent
MouseWheelListener
TextListener
WindowListener
Adaptadores
CheckBox
Choice
List
MouseMotionAdapter
Component
TextComponent
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}
Pgina 4
31/01/2015
Manejo de eventos
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()
generado.
devuelve un valor entero que indica qu tecla modificadora se ha presionado cuando el evento se ha
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
Elusuariohaceclickdentrodelsrollbarparadecrementarunvalor
BLOCK_INCREMENT
Elusuariohaceclickdentrodelsrollbarparaincrementarsuvalor
TRACK
Searrastraelbotnmovibledelscrollbar
UNIT_DECREMENT
Sehahechoclickenelbotnqueestalfinaldelscrollbarparadecrementarsuvalor
UNIT_INCREMENT
Sehahechoclickenelbotnqueestalfinaldelscrollbarparaincrementarsuvalor
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.
Pgina 5
31/01/2015
Manejo de eventos
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
Se ha ocultado el componente.
COMPONENT_MOVED
Se ha movido el componente.
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.
Maria Eugenia Puga Nathal
Pgina 6
31/01/2015
Manejo de eventos
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
BUTTON2_MASK
META_MASK
ALT_GRAPH_MASK
BUTTON3_MASK
SHIFT_MASK
BUTTON1_MASK
CTRL_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
boolean
boolean
boolean
boolean
isAltDown()
isAltGraphDown()
isControlDown()
isMetaDown()
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
Adems se define una constante entera ITEM_STATE_CHANGED, que significa un cambio de estado.
Pgina 7
31/01/2015
Manejo de eventos
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
Maria Eugenia Puga Nathal
Pgina 8
31/01/2015
Manejo de eventos
Hay ocho eventos de ratn. Esta clase define las siguientes constantes enteras, que se pueden utilizar para identificarlos:
MOUSE_CLICKED
MOUSE_DRAGGED
MOUSE_ENTERED
MOUSE_EXITED
MOUSE_MOVED
Se mueve el ratn.
MOUSE_PRESSED
Se presiona el ratn.
MOUSE_RELEASED
Se libera el ratn
MOUSE_WHEEL
Clase MouseWheelEvent
Esta clase encapsula un evento de la rueda del ratn. Es una subclase de MouseEvent. Define dos constantes enteras:
WHEEL_BLOCK_SCROLL
Pgina 9
31/01/2015
Manejo de eventos
WHEEL_UNIT_SCROLL
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.
WHEEL_UNIT_SCROLL, se puede obtener el nmero de unidades de scroll llamando al mtodo:
int getScrollAmount()
Si
el
tipo
es
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)
referenciado por tipo.
donde src es la referencia al componente que genera el evento, el tipo de evento est
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
Se ha activado la ventana.
WINDOW_CLOSED
Se ha cerrado la ventana.
WINDOW_CLOSING
WINDOW_DEACTIVATED
WINDOW_DEICONIFIED
WINDOW_GAINED_FOCUS
WINDOW_ICONIFIED
WINDOW_LOST_FOCUS
WINDOW_OPENED
Se ha abierto la ventana.
WINDOW_STATE_CHANGED
Pgina 10
31/01/2015
Manejo de eventos
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.
Descripcin
Genera eventos de accin (ActionEvent) cuando se presiona el botn.
Checbox
Choice
List
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.
MenuItem
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.
Scrollbar
TextComponent
Window
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.
Descripcin
Define un mtodo para recibir eventos de accin.
Define un mtodo para recibir eventos de ajuste.
Define cuatro mtodos para reconocer cundo se
oculta, se mueve, se cambia de tamao o se muestra
un componente.
ContainerListener
FocusListener
ItemListener
KeyListener
Pgina 11
Mtodos
actionPerformed(ActionEvent e)
adjustmentValueChanged (AdjustmentEvent e)
componentHidden(ComponentEvent e)
componentMoved(ComponentEvent e)
componentResized(ComponentEvent e)
componentShown(ComponentEvent e)
componentAdded(ContainerEvent e)
componentRemoved(ContainerEvent e)
focusGained(FocusEvent e)
focusLost(FocusEvent e)
itemStateChanged(ItemEvent e)
keyPressed(KeyEvent e)
keyReleased(KeyEvent e)
keyTyped(KeyEvent e)
31/01/2015
Manejo de eventos
MouseListener
MouseMotionListener
MouseWheelListener
TextListener
WindowFocusListener
WindowListener
mouseClicked(MouseEvent e)
mouseEntered(MouseEvent e)
mouseExited(MouseEvent e)
mouseReleased(MouseEvent e)
mousePressed(MouseEvent e)
mouseDragged(MouseEvent e)
mouseMoved(MouseEvent e)
mouseWheelMoved(MouseWheelEvent e)
textValueChanged(TextEvent e)
windowGainedFocus (WindowEvent e)
windowLostFocus(WindowEvent e)
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()); }
Pgina 12
31/01/2015
Manejo de eventos
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();
}
Maria Eugenia Puga Nathal
Pgina 13
31/01/2015
Manejo de eventos
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();
Maria Eugenia Puga Nathal
Pgina 14
31/01/2015
Manejo de eventos
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;
Maria Eugenia Puga Nathal
Pgina 15
31/01/2015
Manejo de eventos
}
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
Pgina 16
31/01/2015
Manejo de eventos
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
Pgina 17
31/01/2015
Manejo de eventos
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);}});
}
}
Pgina 18
31/01/2015
Manejo de eventos
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>
*/
Pgina 19
31/01/2015