Modelos Eventos Java
Modelos Eventos Java
I Programacin II
1
_____________________________________________________________________
3.1.3. Modelo de Eventos en Java
Entendemos por evento una accin o cambio en una aplicacin que permite que dicha
aplicacin produzca una respuesta. El modelo de eventos de AWT se descompone en dos
grupos de elementos: las fuentes y los oyentes de eventos. Las fuentes son los elementos que
generan los eventos (un botn, un cuadro de texto, etc), mientras que los oyentes son
elementos que estn a la espera de que se produzca(n) determinado(s) tipo(s) de evento(s)
para emitir determinada(s) respuesta(s).
Para poder gestionar eventos, necesitamos definir el manejador de eventos correspondiente,
un elemento que acte de oyente sobre las fuentes de eventos que necesitemos considerar.
Cada tipo de evento tiene asignada una interfaz, de modo que para poder gestionar dicho
evento, el manejador deber implementar la interfaz asociada. Los oyentes ms comunes son:
ActionListener
ItemListener
KeyListener
MouseListener
Cada uno de estos tipos de evento puede ser producido por diferentes fuentes. Por ejemplo, los
ActionListeners pueden producirse al pulsar un botn, elegir una opcin de un men, o pulsar
Intro. Los MouseListener se producen al pulsar botones del ratn, etc.
Toda la gestin de eventos se lleva a cabo desde el paquete java.awt.event.
Modos de definir un oyente
Supongamos que queremos realizar una accin determinada al pulsar un botn. En este caso,
tenemos que asociar un ActionListener a un objeto Button, e indicar dentro de dicho
ActionListener qu queremos hacer al pulsar el botn. Veremos que hay varias formas de
hacerlo:
1. Que la propia clase que usa el control implemente el oyente
class MiClase implements ActionListener
{
public MiClase()
{
...
Button btn = new Button("Boton");
btn.addActionListener(this);
...
}
public void actionPerformed(ActionEvent e)
{
// Aqui va el codigo de la accion
}
}
2. Definir otra clase aparte que implemente el oyente
class MiClase
{
public MiClase()
{
...
Button btn = new Button("Boton");
btn.addActionListener(new MiOyente());
...
}
Nota: Para generar eventos de teclado, un componente debe tener el foco del teclado.
Para hacer que un componente obtenga el foco del teclado debemos seguir estos pasos:
1. Asegurarnos de que el componente puede obtener el foco del teclado. Por ejemplo, en
algunos sistemas las etiquetas no pueden obtenerlo.
2. Asegurarnos de que el componente pide el foco en el momento apropiado. Para
componentes personalizados, probablemente necesitaremos implementar un
MouseListener que llame al mtodo requestFocus cuando se pulsa el ratn.
3. Si estamos escribiendo un componente personalizado, implementaremos el mtodo
isFocusTraversable del componente, para que devuelva true cuando el componente
est activado. esto permite al usuario usar Tab para ir a nuestro componente.
Mtodos de Evento Key
El interface KeyListener y su correspondiente clase adaptador, KeyAdapter, contienen tres
mtodos:
void keyTyped(KeyEvent)
Se le llama despus de que el usuario teclee un caracter Unicode dentro del
componente escuchado.
void keyPressed(KeyEvent)
Se le llama despus de que el usuario pulse una tecla mientras el componente
escuchado tiene el foco.
void keyReleased(KeyEvent)
Se le llama despus de que el usuario libere una tecla mientras el componente
escuchado tiene el foco.
Ejemplos de manejo de Eventos Key
El siguiente applet demuestra los eventos key. Consiste en un campo de texto en el que
podemos teclear informacin, seguido de un rea de texto que muestra un mensaje cada vez
que el campo de texto dispara un evento key. Un botn en la parte inferior del applet nos
permite borrar tanto el campo como el rea de texto.
La clase KeyEvent
Cada mtodo de evento key tiene un slo parmetro: un objeto KeyEvent. La
clase KeyEvent define los siguientes mtodos:
int getKeyChar()
void setKeyChar(char)
Obtiene o selecciona el caracter Unicode asociado con este evento.
int getKeyCode()
void setKeyCode(int)
Obtiene o selecciona el cdigo de tecla asociado con este evento. El
cdigo de tecla identifica una tecla particular del teclado que el
usuario pulsa o libera. La clase KeyEvent define muchas constantes de
cdigo de teclas para las ms utilizadas. Por ejemplo, VK_A especifica
la tecla A, y VK_ESCAPE especifica la tecla ESCAPE.
void setModifiers(int)
Esto es una imagen del GUI del Applet. Para ejecutarlo, pulsa sobre ella. El applet aparecer
en una nueva ventana de tu navegador..
Prueba esto:
1. Mueve el cursor dentro del rectngulo amarillo de la parte superior del applet.
Vers uno o ms eventos mouse-entered.
2. Pulsa y mantn el botn del ratn..
Vers un evento mouse-pressed. Podras ver algn evento extra como un mouseexited o mouse-entered.
3. Libera el botn del ratn.
Vers une vento mouse-released. Si no has movido el ratn, seguir un evento mouseclicked.
4. Pulsa y mantn el botn del ratn, y arrstralo para el cursor termine fuera del
rea del applet. Libera el botn del ratn.
Vers un evento mouse-pressed, seguido de un evento mouse-exited, seguido por un
evento mouse-released. No se ha notificado el movimiento del cursor. Para obtener
eventos mouse-motion, necesitamos implementar un oyente de mouse-motion.
import javax.swing.*;
import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.Insets;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.event.MouseListener;
import java.awt.event.MouseEvent;
public class MouseEventDemo extends JFrame implements MouseListener {
BlankArea blankArea;
JTextArea textArea;
String newline;
public MouseEventDemo() {
GridBagLayout gridbag = new GridBagLayout();
GridBagConstraints c = new GridBagConstraints();
JPanel contentPane = new JPanel();
contentPane.setLayout(gridbag);
c.fill = GridBagConstraints.BOTH;
c.gridwidth = GridBagConstraints.REMAINDER;
c.weightx = 1.0;
c.weighty = 1.0;
c.insets = new Insets(1, 1, 1, 1);
blankArea = new BlankArea(new Color(0.98f, 0.97f, 0.85f));
gridbag.setConstraints(blankArea, c);
Esto es una imagen del GUI del Applet. Para ejecutarlo, pulsa sobre ella. El applet aparecer
en una nueva ventana de tu navegador..
Prueba esto:
1. Mueve el cursor dentro del rectngulo amarillo de la parte superior del applet.
Vers uno o ms eventos mouse-moved.
2. Pulsa y mantn un botn de ratn y muevelo hasta que el cursor se salga del
rectngulo amarillo.
Vers eventos mouse-dragged.
El siguiente cdigo contiene el manejo de eventos de la clase RectangleDemo.java. Esta clase
maneja tres clases de eventos: mouse presses, mouse drags, y mouse releases. Estos eventos
corresponden a los mtodo mousePressed (de MouseListener), mouseDragged (de
MouseMotionListener), mouseReleased (de MouseListener). As, esta clase debe
implementar tanto MouseListener como MouseMotionListener. Para evitar tener que manejar
demasiados mtodos vacios, esta clase no implementar MouseListener directamente. En su
lugar, extiende MouseAdapter e implementa MouseMotionListener.
...//where initialization occurs:
MyListener myListener = new MyListener();
addMouseListener(myListener);
addMouseMotionListener(myListener);
...
class MyListener extends MouseAdapter
implements MouseMotionListener {
public void mousePressed(MouseEvent e) {
int x = e.getX();
int y = e.getY();
currentRect = new Rectangle(x, y, 0, 0);
repaint();
}
public void mouseDragged(MouseEvent e) {
updateSize(e);
}
public void mouseMoved(MouseEvent e) {
//Do nothing.
}
public void mouseReleased(MouseEvent e) {
updateSize(e);
El API de Timer
Las siguiente tablas listan los mtodos y constructores ms usado de Timer. El
API para usar temporizadores de divide en tres categoras:
Ajuste Fino de la Operacin del Timer
Ejecutar el Timer
Escuchar el Disparo del Timer
Ajuste fino de la Operacin del Timer
Mtodo o Constructor
Propsito
Timer(int,
ActionListener)
void setDelay(int)
int getDelay()
void setInitialDelay(int)
int getInitialDelay()
void
setRepeats(boolean)
boolean isRepeats()
void
setCoalesce(boolean)
boolean isCoalesce()
Mtodo
Propsito
void start()
void restart()
void stop()
Desactiva el timer.
boolean
isRunning()
void addActionListener(ActionListener)
void
removeActionListener(ActionListener)
Propsito
Aade o elimina el oyente de
action.
Esta es una imagen del GUI del Applet. Para ejecutarlo, pulsa sobre ella. El
applet aparecer en una nueva ventana de tu navegador.
Prueba esto:
1. Despliega la ventana pulsando el botn superior del applet.
La clase FocusEvent
Cada mtodo de evento focus tiene un slo parmetro: un objeto FocusEvent,
La clase FocusEvent define el siguiente mtodo:
boolean isTemporary()
Devuelve true si la prdida del foco es temporal. Necesitaremos utilizar
este mtodo si estamos implementando un componente que pueda
indicar que obtendr el foco cuando la ventana lo vuelva a obtener.
El mtodo getComponent, que FocusEvent hereda de ComponentEvent,
devuelve el componente que genero el evento de focus