Presentación de PowerPoint - Departamento de Ciencias e

Anuncio
Introducción a la Programación Orientada a Objetos
OBJETOS Y EVENTOS
INTRODUCCIÓN A LA
PROGRAMACIÓN ORIENTADA
A OBJETOS
GUI
Objetos y Eventos
Dr. Luciano H. Tamargo
http://cs.uns.edu.ar/~lt
Depto. de Ciencias e Ingeniería de la Computación
Universidad Nacional del Sur, Bahía Blanca
2016
• Cada componente de una GUI está asociada a un
objeto gráfico de alguna subclase de Component.
01100
10011
10110
01110
01100
10011
10110
01110
1001
1 11
0 0
1
• Un objeto fuente del evento, está asociado a una
componente reactiva de la GUI, puede percibir un
evento externo provocado por una acción del usuario0 y1 1 0 0
10011
reaccionar disparando un evento interno.
10110
• Un objeto evento se crea implícitamente, asociado a0 1 1 1 0
01100
un evento interno disparado por un objeto fuente del1 0 0 1 1
evento.
10110
• Un objeto oyente (listener) se registra a un objeto 01 10 10 11 0
fuente de evento para responder a la acción del usuario
1 11
0 0
sobre una componente de la GUI.
1
Introducción a la Programación Orientada a Objetos
IPOO - 2016
OBJETOS Y EVENTOS
El usuario realiza una acción sobre una
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
implícitamente:
Evento
Interno
Evento
Externo
percibe
dispara
OBJETO
FUENTE
Component
crea
OBJETO
EVENTO
EventObject
El objeto fuente de evento asociado
a la componente reactiva
dispara un evento interno
creando objetos de alguna subclase
de EventObject
Introducción a la Programación Orientada a Objetos
IPOO - 2016
3
OBJETOS Y EVENTOS
01110
01100
10011
10110
01110
1001
1 11
0 0
1
Profesor Luciano H. Tamargo
Clase de los objetos
Fuente de evento
Clases de los objetos
evento
JButton
ActionEvent
JCheckBox
ActionEvent, ItemEvent
JRadioButton
ActionEvent, ItemEvent
JMenuItem
ActionEvent
JTextField
ActionEvent, KeyEvent
JComboBox
ActionEvent, ItemEvent
Introducción a la Programación Orientada a Objetos
IPOO - 2016
01100
10011
10110
01110
01100
10011
10110
01110
1001
1 11
0 0
1
4
OBJETOS Y EVENTOS
• Cada subclase de EventObject define atributos y
métodos adecuados para un tipo particular de acción del
usuario, como por ejemplo, mover el mouse sobre un
panel, oprimir una tecla o activar un botón.
01100
• En cada uno de estos casos se creará un objeto evento
10011
de una clase específica.
10110
Introducción a la Programación Orientada a Objetos
IPOO - 2016
2
5
• Los objetos de las clases JButton, JTextField,
JComboBox son objetos fuente de evento que crean
objetos evento de clase ActionEvent.
• Esto es, cuando el usuario realiza una acción sobre la
componente asociada al objeto fuente de evento, este 0 1 1 0 0
10011
crea un objeto de clase ActionEvent.
10110
• La clase del objeto oyente que escuche estos eventos0 1 1 1 0
deben implementar la interface ActionListener del 01 10 10 01 01
paquete java.awt.event.
10110
01110
1001
1 11
0 0
1
Introducción a la Programación Orientada a Objetos
IPOO - 2016
6
1
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
manejador del evento
Evento
Interno
Evento
Externo
percibe
dispara
OBJETO
FUENTE
Component
crea
OBJETO
EVENTO
EventObject
OBJETO
Oyente
ActionListener
• La clase del oyente implementa a una interface
redefiniendo al método manejador del evento de
acuerdo al comportamiento esperado en respuesta a la
acción del usuario.
• El manejador del evento recibe como parámetro a un0 1 1 0 0
10011
objeto evento creado implícitamente.
10110
• Cuando un objeto fuente de evento dispara un evento 0 1 1 1 0
01100
interno, crea objetos evento de alguna subclase de
10011
EventObject provista en el paquete
10110
01110
java.awt.event.
1001
1 11
0 0
1
registrado a
El objeto evento es un parámetro
para el método manejador del
Introducción a la Programación Orientada a Objetos
evento
IPOO - 2016
7
OBJETOS Y EVENTOS
8
OBJETOS Y EVENTOS
• La interface define uno o más métodos manejadores
que deben ser implementados considerando el
comportamiento esperado en respuesta a la acción
del usuario.
01100
• La lista de parámetros de un manejador de eventos
10011
siempre consiste en un argumento del tipo de clase
10110
evento.
01110
01100
10011
10110
01110
1001
1 11
0 0
1
Introducción a la Programación Orientada a Objetos
IPOO - 2016
Introducción a la Programación Orientada a Objetos
IPOO - 2016
9
Objeto Evento
Interface de oyente Manejador
ActionEvent
ActionListener
actionPerformed(ActionEvent)
ItemEvent
ItemListener
itemStateChanged(ItemEvent)
MouseEvent
MouseListener
mousePressed(MouseEvent)
01100
10011
mouseReleased(MouseEvent)
mouseEntered(MouseEvent) 1 0 1 1 0
mouseExited(MouseEvent) 0 1 1 1 0
01100
KeyEvent
KeyListener
mouseClicked(MouseEvent) 1 0 0 1 1
10110
keyPressed(KeyEvent)
keyRealesed(KeyEvent)
keyTyped(KeyEvent)
Introducción a la Programación Orientada a Objetos
IPOO - 2016
• Mostrar una ventana con un panel que cambiará de
color según los diferentes eventos del mouse que se
produzcan como consecuencia de las acciones del
usuario.
import
import
import
public
java.awt.*;
java.awt.event.*;
javax.swing.*;
class ControlMouse extends JFrame{
01100
• En otro panel se muestra la acción del usuario y 1la
0011
posición del indicador del mouse sobre la componente.1 0 1 1 0
01110
01100
10011
10110
01110
1001
1 11
0 0
1
Profesor Luciano H. Tamargo
10
EVENTOS DEL MOUSE
OBJETOS Y EVENTOS
Introducción a la Programación Orientada a Objetos
IPOO - 2016
01110
1001
1 11
0 0
1
11
private JPanel panelMouse;
private JLabel eventoMouse;
private Container contenedor;
Introducción a la Programación Orientada a Objetos
IPOO - 2016
01100
10011
10110
01110
01100
10011
10110
01110
1001
1 11
0 0
1
12
2
Introducción a la Programación Orientada a Objetos
EVENTOS DEL MOUSE
EVENTOS DEL MOUSE
public ControlMouse() {
contenedor = getContentPane();
contenedor.setLayout(new GridLayout(2,0));
public ControlMouse() {
panelMouse = new JPanel();
panelMouse.setBackground(Color.WHITE);
panelMouse.setPreferredSize
(new java.awt.Dimension(300, 150));
eventoMouse = new JLabel();
eventoMouse.setPreferredSize
(new java.awt.Dimension(300,70));
…
}
…
01100
10011
10110
01110
01100
10011
10110
01110
1001
1 11
0 0
1
OyenteMouse escuchaMouse
= new OyenteMouse();
01100
panelMouse.addMouseListener(escuchaMouse);1 0 0 1 1
contenedor.add(panelMouse);
contenedor.add(eventoMouse);
}
10110
01110
01100
10011
10110
01110
1001
al panel, 1de1 1
0 0
del mouse
1
• Observemos que el oyente queda registrado
modo que reaccionará ante los eventos
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 mouseEntered (MouseEvent e) {
String s = new String();
eventoMouse.setText(s.format
01100
(“Entró en[%d,%d]", 1 0 0 1 1
10110
e.getX(), e.getY()));
01110
panelMouse.setBackground(Color.RED);
01100
10011
}
public void mouseClicked (MouseEvent e) {
String s = new String();
eventoMouse.setText(s.format
01100
10011
(“Cliqueó en [%d,%d]",
10110
e.getX(), e.getY()));
01110
panelMouse.setBackground(Color.BLUE);
01100
10011
}
10110
01110
1001
1 11
0 0
1
…
}
Introducción a la Programación Orientada a Objetos
IPOO - 2016
10110
01110
1001
1 11
0 0
1
…
}
Introducción a la Programación Orientada a Objetos
IPOO - 2016
15
16
EVENTOS DEL MOUSE
EVENTOS DEL MOUSE
class OyenteMouse implements MouseListener{
…
public void mouseExited (MouseEvent e) {
String s = new String();
eventoMouse.setText(s.format
01100
("Salió en [%d,%d]",1 0 0 1 1
10110
e.getX(), e.getY()));
01110
panelMouse.setBackground(Color.GREEN); 0 1 1 0 0
10011
}
class OyenteMouse implements MouseListener{
…
public void mouseReleased (MouseEvent e {
String s = new String();
eventoMouse.setText(s.format
01100
("Soltó en [%d,%d]",1 0 0 1 1
10110
e.getX(), e.getY()));
01110
panelMouse.setBackground(Color.MAGENTA);0 1 1 0 0
10011
}
…
}
…
}
10110
01110
1001
1 11
0 0
1
Introducción a la Programación Orientada a Objetos
IPOO - 2016
Profesor Luciano H. Tamargo
17
10110
01110
1001
1 11
0 0
1
Introducción a la Programación Orientada a Objetos
IPOO - 2016
18
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
class OyenteMouse implements MouseListener{
…
public void mousePressed (MouseEvent e) {
String s = new String();
eventoMouse.setText(s.format
01100
10011
("Presionó en [%d,%d]",
10110
e.getX(), e.getY()));
01110
panelMouse.setBackground(Color.YELLOW); 0 1 1 0 0
10011
}
10110
01110
1001
1 11
0 0
1
}
Introducción a la Programación Orientada a Objetos
IPOO - 2016
mouseEntered(e:MouseEvent): void
mouseExited(e:MouseEvent): void
public class controlMouse extends JFrame {
private JPanel panelMouse;
private JLabel eventoMouse;
01100
10011
…
class OyenteMouse implements MouseListener{ 10 01 11 11 00
public void mouseClicked(MouseEvent e) { }0 1 1 0 0
public void mousePressed(MouseEvent e) { }1 0 0 1 1
public void mouseReleased(MouseEvent e) { 10}01 11 11 00
public void mouseEntered(MouseEvent e) { }1 0 0 1
public void mouseExited(MouseEvent e) { } 1 1 1
0 0
}
1
}
19
20
private void hacerGUI(){
getContentPane().setLayout(new GridLayout(2,0));
panelMouse = new JPanel();
panelMouse.setBackground(Color.WHITE);
panelMouse.setPreferredSize(new
java.awt.Dimension(300, 150));
eventoMouse = new JLabel();
eventoMouse.setPreferredSize(new
java.awt.Dimension(300,70));
public class controlMouse extends JFrame {
private JPanel panelMouse;
private JLabel eventoMouse;;
…
class OyenteMouse implements MouseListener,
OyenteMouse escuchaMouse = new OyenteMouse();
panelMouse.addMouseListener(escuchaMouse);
panelMouse.addMouseMotionListener(escuchaMouse);
getContentPane().add(panelMouse);
getContentPane().add(eventoMouse);
} …
}
21
EVENTOS DEL MOUSE
public class controlMouse extends JFrame {
private JPanel panelMouse;
private JLabel eventoMouse;;
…
class OyenteMouse implements MouseListener,
MouseMotionListener{
01100
public void mouseDragged(MouseEvent e){
10011
10110
String s = new String();
01110
eventoMouse.setText(s.format("Arrastró a 0 1 1 0 0
[%d,%d]", e.getX(),e.getY()));}
10011
10110
public void mouseMoved(MouseEvent e){
01110
String s = new String();
1001
eventoMouse.setText(s.format("Se movió a 1 1 1
0 0
[%d,%d]", e.getX(),e.getY()));}
1 23
}
}
Profesor Luciano H. Tamargo
EVENTOS DEL MOUSE
01100
10011
10110
MouseMotionListener{
public
public
public
public
public
void
void
void
void
void
mouseClicked(MouseEvent e) { }0 1 1 1 0
01100
mousePressed(MouseEvent e) { } 1 0 0 1 1
mouseReleased(MouseEvent e) { 1}0 1 1 0
mouseEntered(MouseEvent e) { }0 1 1 1 0
1001
mouseExited(MouseEvent e) { } 1 1 1
0
1
}
}
0
22
OBJETOS Y EVENTOS
• Con frecuencia una interface de eventos brinda más
servicios que los que necesitamos.
• Por ejemplo, la interface MouseListener ofrece cinco
servicios, si nuestra GUI solo va a reaccionar ante 0un
1100
0011
click del mouse tenemos que definir el código 11de
0110
01110
mouseClicked, los otros cuatro quedan sin
01100
especificar.
10011
10110
• Sin embargo, si definimos una clase que implementa0 a
1110
1001
esta interface es necesario implementar todos los
1 11
servicios provistos.
0 0
1
Introducción a la Programación Orientada a Objetos
IPOO - 2016
24
4
Introducción a la Programación Orientada a Objetos
OBJETOS Y EVENTOS
• Un adaptador es una clase que implementa todos los
métodos de una interface, de modo que en lugar de
implementar una interface podemos extender la clase
adaptador.
01100
10011
• Para la interface MouseListener Java brinda la clase
10110
01110
MouseAdapter con cuerpo vacío para los cinco métodos.
• Para MouseMotionListener la clase adaptador
MouseMotionAdapter.
Introducción a la Programación Orientada a Objetos
IPOO - 2016
Profesor Luciano H. Tamargo
01100
1es
0011
10110
01110
1001
1 11
0 0
1
25
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
Evento
Interno
Evento
Externo
percibe
dispara
OBJETO
FUENTE
Component
crea
OBJETO
EVENTO
EventObject
OBJETO
Oyente
ActionListener
registrado a
El objeto evento es un parámetro
para el método manejador del
Introducción a la Programación Orientada a Objetos
evento
IPOO - 2016
26
5
Descargar