You are on page 1of 5

Introducción a la Programación Orientada a Objetos

OBJETOS Y EVENTOS
INTRODUCCIÓN A LA
• Cada componente de una GUI está asociada a un
PROGRAMACIÓN ORIENTADA objeto gráfico de alguna subclase de Component.
A OBJETOS • Un objeto fuente del evento, está asociado a una
componente reactiva de la GUI, puede percibir un
01100 evento externo provocado por una acción del usuario0 y1 1 0 0
GUI 10011
10110 reaccionar disparando un evento interno.
10011
10110
Objetos y Eventos 01110
01100
• Un objeto evento se crea implícitamente, asociado a0 1 1 1 0
01100
10011
un evento interno disparado por un objeto fuente del1 0 0 1 1
10110 evento. 10110
01110
Dr. Luciano H. Tamargo
http://cs.uns.edu.ar/~lt 1001
• Un objeto oyente (listener) se registra a un objeto 01 10 10 11 0
Depto. de Ciencias e Ingeniería de la Computación 1 11 fuente de evento para responder a la acción del usuario
1 11
Universidad Nacional del Sur, Bahía Blanca 0 0 sobre una componente de la GUI. 0 0
2018 1 1
2

El usuario realiza una acción sobre una OBJETOS Y EVENTOS


componente reactiva que genera un
evento externo
• La clase de un objeto fuente de evento determina las
clases de los objetos evento que se crearán
Evento Evento
Interno implícitamente:
Externo
Clase de los objetos Clases de los objetos
percibe Fuente de evento evento 01100
dispara
JButton ActionEvent 10011
10110
OBJETO OBJETO
JCheckBox ActionEvent, ItemEvent 01110
FUENTE EVENTO
01100
Component crea EventObject
JRadioButton ActionEvent, ItemEvent 10011
El objeto fuente de evento asociado 10110
JMenuItem ActionEvent 01110
a la componente reactiva 1001
dispara un evento interno JTextField ActionEvent, KeyEvent 1 11
creando objetos de alguna subclase 0 0
JComboBox ActionEvent, ItemEvent
1
de EventObject
3 4

OBJETOS Y EVENTOS OBJETOS Y EVENTOS

• Cada subclase de EventObject define atributos y • Los objetos de las clases JButton, JTextField,
métodos adecuados para un tipo particular de acción del JComboBox son objetos fuente de evento que crean
usuario, como por ejemplo, mover el mouse sobre un objetos evento de clase ActionEvent.
panel, oprimir una tecla o activar un botón. • Esto es, cuando el usuario realiza una acción sobre la
01100
• En cada uno de estos casos se creará un objeto evento componente asociada al objeto fuente de evento, este 0 1 1 0 0
10011 10011
de una clase específica. 10110 crea un objeto de clase ActionEvent. 10110
01110 • La clase del objeto oyente que escuche estos eventos0 1 1 1 0
01100
10011
deben implementar la interface ActionListener del 01 10 10 01 01
10110 paquete java.awt.event. 10110
01110 01110
1001 1001
1 11 1 11
0 0 0 0
1 1
5 6

Profesor Luciano H. Tamargo 1


Introducción a la Programación Orientada a Objetos

El objeto oyente es instancia de una clase que OBJETOS Y EVENTOS


implementa una interface y redefine el método
manejador del evento
• La clase del oyente implementa a una interface
redefiniendo al método manejador del evento de
Evento Evento
Interno acuerdo al comportamiento esperado en respuesta a la
Externo
acción del usuario.
percibe dispara • El manejador del evento recibe como parámetro a un0 1 1 0 0
10011
objeto evento creado implícitamente. 10110
OBJETO OBJETO OBJETO
FUENTE EVENTO Oyente • Cuando un objeto fuente de evento dispara un evento 0 1 1 1 0
01100
Component crea EventObject ActionListener interno, crea objetos evento de alguna subclase de 1 0 0 1 1
EventObject provista en el paquete 10110
java.awt.event. 01110
registrado a 1001
1 11
El objeto evento es un parámetro 0 0
para el método manejador del 1
evento 7 8

OBJETOS Y EVENTOS OBJETOS Y EVENTOS

• La interface define uno o más métodos manejadores Objeto Evento Interface de oyente Manejador
que deben ser implementados considerando el ActionEvent ActionListener actionPerformed(ActionEvent)
comportamiento esperado en respuesta a la acción ItemEvent ItemListener itemStateChanged(ItemEvent)
del usuario. MouseEvent MouseListener mousePressed(MouseEvent)
01100
• La lista de parámetros de un manejador de eventos 01100
mouseReleased(MouseEvent)
10011 10011
siempre consiste en un argumento del tipo de clase
10110 mouseEntered(MouseEvent)1 0 1 1 0
evento. 01110
mouseExited(MouseEvent) 0 1 1 1 0
01100 01100
10011 mouseClicked(MouseEvent) 1 0 0 1 1
10110 KeyEvent KeyListener keyPressed(KeyEvent) 10110
01110 01110
1001 keyRealesed(KeyEvent) 1001
1 11 keyTyped(KeyEvent) 1 11
0 0 0 0
1 1
9 10

OBJETOS Y EVENTOS EVENTOS DEL MOUSE

• Mostrar una ventana con un panel que cambiará de import java.awt.*;


color según los diferentes eventos del mouse que se import java.awt.event.*;
produzcan como consecuencia de las acciones del import javax.swing.*;
usuario. public class ControlMouse extends JFrame{
01100 01100
• En otro panel se muestra la acción del usuario y 1la 0011 private JPanel panelMouse; 10011
posición del indicador del mouse sobre la componente.1 0 1 1 0 private JLabel eventoMouse;
10110
01110 01110
01100 private Container contenedor; 01100
10011 10011
10110 10110
01110 01110
1001 1001
1 11 1 11
0 0 0 0
1 1
11 12

Profesor Luciano H. Tamargo 2


Introducción a la Programación Orientada a Objetos

EVENTOS DEL MOUSE EVENTOS DEL MOUSE

public ControlMouse() { public ControlMouse() {


contenedor = getContentPane();
contenedor.setLayout(new GridLayout(2,0)); …
OyenteMouse escuchaMouse
panelMouse = new JPanel(); 01100 = new OyenteMouse(); 01100
panelMouse.setBackground(Color.WHITE); 10011 panelMouse.addMouseListener(escuchaMouse);1 0 0 1 1
10110 10110
panelMouse.setPreferredSize 01110 01110
(new java.awt.Dimension(300, 150)); 01100 contenedor.add(panelMouse); 01100
10011 contenedor.add(eventoMouse); 10011
10110 10110
eventoMouse = new JLabel(); 01110 } 01110
eventoMouse.setPreferredSize 1001 1001
(new java.awt.Dimension(300,70)); 1 11 • Observemos que el oyente queda registrado al panel, 1de1 1

0 0 modo que reaccionará ante los eventos del mouse 0 0
1 1
} producidos ante las acciones del usuario sobre el panel.
13 14

EVENTOS DEL MOUSE EVENTOS DEL MOUSE

class OyenteMouse implements MouseListener{ class OyenteMouse implements MouseListener{



public void mouseClicked (MouseEvent e) { public void mouseEntered (MouseEvent e) {
String s = new String(); String s = new String();
eventoMouse.setText(s.format 01100 eventoMouse.setText(s.format 01100
10011
(“Cliqueó en [%d,%d]", (“Entró en[%d,%d]", 1 0 0 1 1
10110 10110
e.getX(), e.getY()));
01110 e.getX(), e.getY()));
01110
panelMouse.setBackground(Color.BLUE); 01100 panelMouse.setBackground(Color.RED); 01100
} 10011 } 10011
10110 10110
01110 01110
… 1001 … 1001
} 1 11 } 1 11
0 0 0 0
1 1
15 16

EVENTOS DEL MOUSE EVENTOS DEL MOUSE

class OyenteMouse implements MouseListener{ class OyenteMouse implements MouseListener{


… …
public void mouseExited (MouseEvent e) { public void mouseReleased (MouseEvent e {
String s = new String(); String s = new String();
eventoMouse.setText(s.format 01100 eventoMouse.setText(s.format 01100
("Salió en [%d,%d]",1 0 0 1 1 ("Soltó en [%d,%d]",1 0 0 1 1
10110 10110
e.getX(), e.getY()));
01110 e.getX(), e.getY()));
01110
panelMouse.setBackground(Color.GREEN); 0 1 1 0 0 panelMouse.setBackground(Color.MAGENTA);0 1 1 0 0
} 10011 } 10011
10110 10110
01110 01110
… 1001 … 1001
} 1 11 } 1 11
0 0 0 0
1 1
17 18

Profesor Luciano H. Tamargo 3


Introducción a la Programación Orientada a Objetos

java.awt.event.MouseListener

EVENTOS DEL MOUSE EVENTOS DEL MOUSE mouseClicked(e:MouseEvent): void


mousePressed(e:MouseEvent): void
mouseReleased(e:MouseEvent): void
mouseEntered(e:MouseEvent): void
class OyenteMouse implements MouseListener{
mouseExited(e:MouseEvent): void

public void mousePressed (MouseEvent e) { public class controlMouse extends JFrame {
String s = new String(); private JPanel panelMouse;
eventoMouse.setText(s.format 01100 private JLabel eventoMouse; 01100
10011
("Presionó en [%d,%d]", … 10011
10110
e.getX(), e.getY()));
01110
class OyenteMouse implements MouseListener{ 10 01 11 11 00
panelMouse.setBackground(Color.YELLOW); 0 1 1 0 0 public void mouseClicked(MouseEvent e) { }0 1 1 0 0
} 10011 public void mousePressed(MouseEvent e) { }1 0 0 1 1
10110
01110
public void mouseReleased(MouseEvent e) { 10}01 11 11 00
1001 public void mouseEntered(MouseEvent e) { }1 0 0 1
} 1 11 public void mouseExited(MouseEvent e) { } 1 1 1
0 0 0 0
1
} 1
}
19 20

private void hacerGUI(){


getContentPane().setLayout(new GridLayout(2,0)); EVENTOS DEL MOUSE
panelMouse = new JPanel();
panelMouse.setBackground(Color.WHITE); public class controlMouse extends JFrame {
panelMouse.setPreferredSize(new
java.awt.Dimension(300, 150)); private JPanel panelMouse;
eventoMouse = new JLabel(); private JLabel eventoMouse;;
eventoMouse.setPreferredSize(new …
java.awt.Dimension(300,70)); 01100
class OyenteMouse implements MouseListener, 10011
MouseMotionListener{
10110
OyenteMouse escuchaMouse = new OyenteMouse(); public void mouseClicked(MouseEvent e) { }0 1 1 1 0
panelMouse.addMouseListener(escuchaMouse); 01100
public void mousePressed(MouseEvent e){ } 1 0 0 1 1
panelMouse.addMouseMotionListener(escuchaMouse); public void mouseReleased(MouseEvent e) { 1}0 1 1 0
public void mouseEntered(MouseEvent e) { }0 1 1 1 0
getContentPane().add(panelMouse); 1001
public void mouseExited(MouseEvent e) { } 1 1 1
getContentPane().add(eventoMouse); 0 0
} … } 1
} 21
} 22

EVENTOS DEL MOUSE OBJETOS Y EVENTOS


public class controlMouse extends JFrame {
private JPanel panelMouse; • Con frecuencia una interface de eventos brinda más
private JLabel eventoMouse;;
… servicios que los que necesitamos.
class OyenteMouse implements MouseListener, • Por ejemplo, la interface MouseListener ofrece cinco
MouseMotionListener{
01100 servicios, si nuestra GUI solo va a reaccionar ante 0un
1100
public void mouseDragged(MouseEvent e){ 10011
10110
click del mouse tenemos que definir el código 11de 0011
0110
String s = new String();
01110
eventoMouse.setText(s.format("Arrastró a 0 1 1 0 0 mouseClicked, los otros cuatro quedan sin 01110
01100
[%d,%d]", e.getX(),e.getY()));}
10011 especificar. 10011
public void mouseMoved(MouseEvent e){ 10110 10110
01110
• Sin embargo, si definimos una clase que implementa0 a
1110
String s = new String(); 1001 esta interface es necesario implementar todos los 1001
eventoMouse.setText(s.format("Se movió a 1 1 1 1 11
0 0
[%d,%d]", e.getX(),e.getY()));} servicios provistos. 0 0
1 23 1
}
} 24

Profesor Luciano H. Tamargo 4


Introducción a la Programación Orientada a Objetos

OBJETOS Y EVENTOS El objeto oyente es instancia de una clase que


implementa una interface y redefine el método
responsable de reaccionar ante la acción del usuario
• Un adaptador es una clase que implementa todos los
métodos de una interface, de modo que en lugar de Evento Evento
implementar una interface podemos extender la clase Externo Interno
adaptador. 01100 percibe dispara
10011
• Para la interface MouseListener Java brinda la clase
10110
OBJETO OBJETO OBJETO
MouseAdapter con cuerpo vacío para los cinco métodos.
01110
FUENTE EVENTO Oyente
01100 ActionListener
Component crea EventObject
• Para MouseMotionListener la clase adaptador 1es
0011
10110
MouseMotionAdapter. 01110
1001 registrado a
1 11
0 0 El objeto evento es un parámetro
1 para el método manejador del
25 evento 26

Profesor Luciano H. Tamargo 5

You might also like