Está en la página 1de 38

U II

Programacin Orientada a Eventos

Eventos en Java
Un evento es resultado de la ejecucin de una accin dentro de un entorno grfico. Los eventos son objetos. Los componentes (botones, menues, campo de texto) son generadores de eventos (origen)

Un origen de eventos debe registrar objetos oyentes que manipulen a los eventos

Eventos en Java
Origen de eventos Oyente de eventos

registra

Objeto
ge n er a

Objeto
la u ip n a

Evento Objeto

El paquete java.awt.event
El paquete java.awt.event proporciona clases base para generar eventos.

Contiene una serie de interfaces para implementar objetos oyentes

Adicionalmente proporciona un grupo de clases adaptadoras para facilitar la codificacin

Paquete java.awt.event
Clases Adaptadoras
WindowAdapter WindowAdapter KeyAdapter KeyAdapter FocusAdapter FocusAdapter MouseMotionAdapter MouseMotionAdapter EventObject EventObject Object Object ComponentAdapter ComponentAdapter ContainerAdapter ContainerAdapter MouseAdapter MouseAdapter

Clases Eventos
ItemEvent ItemEvent TextEvent TextEvent

AWTObject AWTObject AdjustmentEvent AdjustmentEvent ActionEvent ActionEvent ComponentEvent ComponentEvent FocusEvent FocusEvent InputEvent InputEvent KeyEvent KeyEvent MouseEvent MouseEvent

ContainerEvent ContainerEvent WindowEvent WindowEvent

Paquete java.awt.event
EventListener EventListener ActionListener ActionListener AdjustmentListener AdjustmentListener ComponentListener ComponentListener ContainerListener ContainerListener FocusListener FocusListener ItemListener ItemListener KeyListener KeyListener MouseListener MouseListener MouseMotionListener MouseMotionListener MouseWheelListener MouseWheelListener TextListener TextListener WindowListener WindowListener WindowFocusListener WindowFocusListener WindowStateListener WindowStateListener

Interfaces que deben implementar los oyentes

III.4

Registro de Oyentes

Registro de Oyentes
import java.awt.*; import java.awt.event.*; public class EBotonEvento extends Frame{ int tipoCara;

Objetos origen de Eventos

public EBotonEvento(){ super("Manejo Simple de Eventos"); Objetos setSize(300,300); oyentes de setLayout(new FlowLayout()); setBackground(Color.GRAY); Eventos tipoCara=0; Button boton1 = new Button("Carita Feliz"); Button boton2 = new Button("Carita Triste"); AccionBoton aBoton1 = new AccionBoton(1); AccionBoton aBoton2 = new AccionBoton(2); add(boton1); Registro de add(boton2); boton1.addActionListener(aBoton1); oyentes boton2.addActionListener(aBoton2); setVisible(true); }

Registro de Oyentes
Origen de eventos El objeto boton1 registra al oyente aBoton1 usando el mtodo addActionListener() boton1 aBoton1 Oyente de eventos

El nico evento que puede generar un botn es de la clase ActionEvent

Registro de Oyentes
La forma de registrar objetos oyentes es similar para cualquier tipo de evento:

objetoOrigen.addEventoListener(objetoOyente);

Aqu se indica el tipo de Evento

Clase del Oyente


La clase del public void paint(Graphics g){...} oyente public static void main(String[] args) {...} implementa ActionListener
class AccionBoton implements ActionListener { private int elValor; public AccionBoton(int valor){ elValor = valor; } public void actionPerformed(ActionEvent e){ tipoCara = elValor; repaint(); } } } ActionListener declara el mtodo

actionPerformed, que se ejecuta cuando se genera un ActionEvent

Eventos de Botones

Generador de Eventos Evento Generado Interfaz del Oyente Mtodos implementados

Button ActionEvent ActionListener ActionPerformed()

Un botn solo genera eventos de la clase ActionEvent

III.4

Otras Formas de Oyentes

Ventana como oyente


Cualquier objeto puede ser un oyente
public class EBotonEvento1 extends Frame implements ActionListener{ int tipoCara; Button boton1,boton2; La ventana es public EBotonEvento1(){ ...

el oyente

boton1 = new Button("Carita Feliz"); boton2 = new Button("Carita Triste"); add(boton1); add(boton2); boton1.addActionListener(this); boton2.addActionListener(this); setVisible(true); } ...

Se registra la ventana como oyente

Generador y Oyente
La ventana es ... el oyente
public void paint(Graphics g){...} public static void main(String[] args) {...} public void actionPerformed(ActionEvent e){ if(e.getSource() == boton1) tipoCara = 1; else tipoCara = 2; repaint(); } }

getSource indica que objeto gener el Evento

Oyente annimo
... public class EBotonEvento2 extends Frame { ... Se registra un public EBotonEvento2(){ oyente creando un ... boton1 = new Button("Carita Feliz"); objeto de la interfaz ActionListener ... boton1.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ tipoCara = 1; repaint(); } }); ... }

Se puede registrar un oyente annimo

III.4

Eventos de Ventana

Eventos de Ventanas
Generador de Eventos Evento Generado Interfaz del Oyente Mtodos implementados Frame, Dialog WindowEvent WindowListener windowClosing() windowOpened() windowClosed() windowIconified() windowDeiconified() windowActivated() windowDeactivated()

Una Ventana solo genera eventos de la clase WindowEvent

Registro de Oyente
import java.awt.*; import java.awt.event.*; public class EVentanaEvento extends Frame { ... public EVentanaEvento(){ ... AccionVentana aVentanaEvento = new AccionVentana(); addWindowListener(aVentanaEvento); ... }

Registro de oyente

Objeto oyente

Clase del Oyente


private class AccionVentana implements WindowListener { public void windowClosing(WindowEvent e){ System.exit(0); } public void windowOpened(WindowEvent e){} public void windowClosed(WindowEvent e){} public void windowIconified(WindowEvent e) {} public void windowDeiconified(WindowEvent e){} public void windowActivated(WindowEvent e){} public void windowDeactivated(WindowEvent e){} } }

La clase oyente debe implementar todos los mtodos de la interfaz WindowListener, aunque no los use.

III.4

Clases Adaptadoras

Clase Adaptadora
Es muy tedioso implementar interfaces si solo se ocuparn pocos mtodos

Java proporciona clases adaptadoras que ya implementaron todos los mtodos de las interfaces

Para usarlas deben heredar a la clase oyente

Oyente heredando un Adaptador


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

La clase oyente entonces hereda la clase adaptadora para el evento

WindowAdapter es la clase adaptadora para WindowEvent

Oyente annimo
import java.awt.*; import java.awt.event.*; public class EVentanaEvento extends Frame { ... public EVentanaEvento(){ ... addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); show(); } ... }

Se puede crear un oyente annimo utilizando la clase adaptadora

III.4

Eventos de Teclado

Eventos de Teclado
Generador de Eventos Evento Generado Interfaz del Oyente Clase Adaptadora Mtodos implementados Componente KeyEvent KeyListener KeyAdapter keyPressed() keyReleased() keyTyped()

Las teclas solo genera eventos de la clase KeyEvent

Eventos de Teclado
Un objeto KeyEvent tiene los siguientes miembros:
VK_F1,... VK_1,... VK_A,... VK_UP,... Variable esttica que define cada tecla

getKeyCode() Devuelve el valor de la tecla utilizada

Registro de Oyente
import java.awt.*; import java.awt.event.*; public class ETeclaEvento extends Frame { ... public ETeclaEvento(){ ... addKeyListener(new AccionTecla()); ... } public void paint(Graphics g){...} public static void main(String[] args) {...}

Registro de oyente

Clase del Oyente


private class AccionTecla extends KeyAdapter{ public void keyPressed(KeyEvent e){ int codigoTecla = e.getKeyCode(); switch(codigoTecla){ case KeyEvent.VK_UP: iY-=5; break; case KeyEvent.VK_DOWN: iY+=5; break; case KeyEvent.VK_LEFT: iX-=5; break; case KeyEvent.VK_RIGHT: iX+=5; } repaint(); } } }

La clase oyente usa getKeyCode() para identificar a la tecla utilizada.

III.4

Eventos de Ratn

Eventos de Ratn
Generador de Eventos Evento Generado Interfaz del Oyente Clase Adaptadora Mtodos implementados Componente MouseEvent MouseListener MouseMotionListener MouseAdapter MouseMotionAdapter mouseDragged() mouseMoved() mousePressed() mouseReleased() mouseClicked()

El ratn solo genera eventos de la clase MouseEvent

Mtodos del Oyente


Las interfaces para oyentes de eventos de un ratn tienen los siguientes mtodos:
mousePressed() mouseReleased() mouseClicked() mouseDragged() mouseMoved() Cuando se pulsa un botn del ratn Cuando se libera el botn del ratn Cuando se da un click Cuando se mueve el ratn con un botn pulsado Cuando se mueve el ratn

Registro de Oyente
import java.awt.*; import java.awt.event.*; public class ERatonEvento extends Frame { Oyente de ... public ERatonEvento(){ pulsacin ... addMouseListener(new AccionBoton()); addMouseMotionListener(new MovimientoBoton()); ... } Oyente de public void paint(Graphics g){...}

movimiento

public static void main(String[] args) {...}

Clases del Oyente


private class AccionBoton extends MouseAdapter { public void mousePressed(MouseEvent e){ bPulsado=true; iX=e.getX(); iY=e.getY(); repaint(); } public void mouseReleased(MouseEvent e){ bPulsado=false; repaint(); } }

Con getX() y getY() se obtiene la posicin del ratn en el momento de generar el evento

Oyentes para cualquier Componente Swing


Component listener
Escucha cambios en el tamao, posicin o visibilidad de los Componentes

focus listener
Escucha cuando el componente adquiri o perdi el foco del teclado (o sea que se puede introducir texto en l)

Oyentes para cualquier Componente Swing


key listener
Escucha cuando se oprime cualquier tecla del teclado. El componente debe estar activo (tener el foco)

mouse listener
Escucha clicks del mouse (sumir y soltar el botn) y movimiento afuera y adentro del rea del componente.

Oyentes para cualquier Componente Swing


mouse-motion listener
Escucha cambios en la posicin del cursor sobre el componente

mouse-wheel listener
Escucha el movimiento de la rueda del mouse sobre el componente

Otros Oyentes
Para saber que tipo de eventos puede generar un componente slo hay que ver la documentacin de los mtodos. Por ejemplo: JComboBox tiene los siguientes mtodos para registrar oyentes:
addActionListener addItemListener addPopupMenuListener

También podría gustarte