Professional Documents
Culture Documents
Tema 2
Eventos
Todo sistema operativo que utiliza interfaces grficas de usuario debe estar constantemente monitorizando el entorno para capturar y tratar los eventos que se producen El sistema operativo informa de estos eventos a los programas que se estn ejecutando y entonces cada programa decide que hace para dar respuesta a esos eventos Los eventos pueden estar producidos por el sistema o por el usuario
Comunicacin Persona-Mquina
A. Beln Martnez
Tema 2
Eventos en Java
Cada vez que el usuario realiza una determinada accin sobre una aplicacin Java se produce un evento que el sistema operativo transmite a Java. Java crea un objeto de una determinada clase de evento, y este evento es transmitido a un determinado mtodo para que lo gestione. El modelo de eventos de Java est basado en delegacin (la responsabilidad de gestionar un evento que ocurre en un objeto source- la tiene otro objeto-listener-)
Comunicacin Persona-Mquina
A. Beln Martnez
Tema 2
Comunicacin Persona-Mquina
A. Beln Martnez
Tema 2
Fuente de eventos
Los fuentes de eventos (event sources) son objetos que detectan eventos y notifican a los receptores que se han producido dichos eventos Ejemplos de fuentes :
Botn sobre el que se pulsa Campo de texto que pierde el foco Campo de texto sobre el que se presiona una tecla Ventana que se cierra Etc.
Comunicacin Persona-Mquina
A. Beln Martnez
Tema 2
Comunicacin Persona-Mquina
A. Beln Martnez
Tema 2
Comunicacin Persona-Mquina
A. Beln Martnez
Tema 2
Registro
Cuando ya disponemos del objeto fuente y del objeto receptor es necesario asociarlos, es decir, hay que registrar el objeto receptor de eventos con el objeto fuente de los mismos:
objetoFuenteEventos.addEventListener (objetoReceptorEventos)
Comunicacin Persona-Mquina
A. Beln Martnez
Tema 2
Adaptadores
Los adaptadores (adapter classes) tienen como objetivo evitar la tediosa tarea de tener que implementar todos los mtodos de las interfaces listener. Por ello existe una clase adaptadora por cada interface listener que tiene ms de un mtodo: MouseAdapter, WindowAdapter, KeyAdapter, MouseMotionAdapter, FocusAdapter, ContainerAdapter y ComponentAdapter, etc. Las clases adaptadoras implementan los mtodos de la interface
Comunicacin Persona-Mquina
A. Beln Martnez
Tema 2
Crear la clase receptora como una clase interna de la clase Marco1. Una clase interna es una clase definida dentro de otra clase y que tiene acceso a los miembros de la clase que la encierra.
Ambas posibilidades son permitidas por Jbuilber A continuacin vamos a ver todos estos conceptos con dos ejemplos
Comunicacin Persona-Mquina
10
A. Beln Martnez
Tema 2
Ejemplo 1. ActionEvent
- Cambiar el color del fondo de una ventana pulsando en un botn
Comunicacin Persona-Mquina
11
A. Beln Martnez
Tema 2
Comunicacin Persona-Mquina
12
A. Beln Martnez
Tema 2
Comunicacin Persona-Mquina
13
A. Beln Martnez
Tema 2
Comunicacin Persona-Mquina
14
A. Beln Martnez
Tema 2
A. Beln Martnez
Tema 2
Registro
Finalmente, es necesario registrar el objeto receptor de eventos con el objeto fuente de los mismos:
jButtonAzul.addActionListener(pB)
Una vez registrado, cada vez que ocurre el evento (pulsamos el botn) automticamente se llama al mtodo apropiado (actionPerformed), pasndole como parmetro un objeto que es una instancia de
ActionEvent.
Comunicacin Persona-Mquina
16
A. Beln Martnez
Tema 2
Registro (II)
class Marco1 extends JFrame{ void cambiaColor(ActionEvent e){ contentPane.setBackground(Color.blue); } class ProcesaBoton implements ActionListener { public void actionPerformed(ActionEvent e){ cambiaColor(e); } } private void jbInit(){ ProcesaBoton pB = new ProcesaBoton(); jButtonAzul.addActionListener(pB); }} } Comunicacin Persona-Mquina
17
A. Beln Martnez
Tema 2
Como clase interna de la clase Marco1 (es la ya comentada en la transparencia 15) Pasndole una referencia a la clase Marco1 en el constructor
Comunicacin Persona-Mquina
18
A. Beln Martnez
Tema 2
Comunicacin Persona-Mquina
19
A. Beln Martnez
Tema 2
Paso 1 Paso 2
Paso 3
Comunicacin Persona-Mquina
20
A. Beln Martnez
Tema 2
Comunicacin Persona-Mquina
21
A. Beln Martnez
Tema 2
A. Beln Martnez
Tema 2
Paso 1 Paso 2
Paso 3
Comunicacin Persona-Mquina
23
A. Beln Martnez
Tema 2
} private void jbInit() throws Exception { jBotonAzul.addActionListener(new Marco1_jBotonAzul_actionAdapter(this)); } void cambiaColor(ActionEvent e) { contentPane.setBackground(Color.blue); } } // fin de la clase Marco1 class Marco1_jBotonAzul_actionAdapter implements java.awt.event.ActionListener { Marco1 adaptee; Marco1_jBotonAzul_actionAdapter(Marco1 adaptee) { this.adaptee = adaptee; } public void actionPerformed(ActionEvent e) { adaptee.cambiaColor(e); }
Clase Receptora
Comunicacin Persona-Mquina
24
A. Beln Martnez
Tema 2
Ejemplo 2. FocusEvent
- Validar la longitud de un campo de texto (JTextField) cuando dicho componente pierde el foco.
Comunicacin Persona-Mquina
25
A. Beln Martnez
Tema 2
(tfDNI)
Comunicacin Persona-Mquina
26
A. Beln Martnez
Tema 2
Comunicacin Persona-Mquina
27
A. Beln Martnez
Tema 2
Comunicacin Persona-Mquina
28
A. Beln Martnez
Tema 2
public void focusGained (FocusEvent e){ } // se deja vaco porque no lo utilizamos public void focusLost (FocusEvent e) { compruebaLongitud(e); } } private void jbInit(){ ProcesaFoco pF = new ProcesaFoco(); } } // fin de la clase Marco1 Comunicacin Persona-Mquina
29
A. Beln Martnez
Tema 2
Registro
tfDNI.addFocusListener(pF)
Comunicacin Persona-Mquina
30
A. Beln Martnez
Tema 2
Registro (II)
class Marco1 extends JFrame{ void compruebaLongitud(FocusEvent e){ if (tfDNI.getText().length()!=8) . . .} class ProcesaFoco implements FocusListener { public void focusGained (FocusEvent e){ } public void focusLost (FocusEvent e) { compruebaLongitud(e); } } private void jbInit(){ ProcesaFoco pF = new ProcesaFoco(); tfDNI.addFocusListener(pF) } } // fin de la clase Marco1 Comunicacin Persona-Mquina
31
A. Beln Martnez
Tema 2
Adaptadores
Los adaptadores (adapter classes) tienen como objetivo evitar la tarea de tener que implementar todos los mtodos de las interfaces listener. Las clases adaptadoras implementan los mtodos de la interface
En el ejemplo que nos ocupa, FocuListener tiene dos mtodos: focusGained y focusLost, pero realmente slo queremos dar implementacin a uno de ellos: focusLost. Para ello acudimos a la clase adaptadora FocusAdapter.
Comunicacin Persona-Mquina
32
A. Beln Martnez
Tema 2
Adaptadores (II)
class Marco1 extends JFrame{ void compruebaLongitud(FocusEvent e){ if (tfDNI.getText().length()!=8) . . .} class ProcesaFoco extends FocusAdapter { public void focusLost (FocusEvent e) { compruebaLongitud(e); } } private void jbInit(){ ProcesaFoco pF = new ProcesaFoco(); tfDNI.addFocusListener(pF)
Solo se proporciona implementacin al mtodo focusLost
A. Beln Martnez
Tema 2
Comunicacin Persona-Mquina
34
A. Beln Martnez
Tema 2
Clase adaptadora interna de la clase Marco1 lo que hace que se pueda invocar el mtodo compruebaLongitud directamente
Comunicacin Persona-Mquina
35
A. Beln Martnez
Tema 2
Comunicacin Persona-Mquina
36
A. Beln Martnez
Tema 2
Comunicacin Persona-Mquina
37
A. Beln Martnez
Tema 2
Eventos - Resumen
Comunicacin Persona-Mquina
38
A. Beln Martnez
Tema 2
AdjustmentEvent
AdjustmentListener
adjustmentValueChanged(AdjustmentEvent)
ComponentEvent
ComponentListener
ComponentAdapter
ContainerEvent
ContainerListener
ContainerAdapter
Comunicacin Persona-Mquina
39
A. Beln Martnez
Tema 2
KeyEvent
KeyListener
KeyAdapter
keyPressed (KeyEvent) KeyReleased (KeyEvent) keyTyped (KeyEvent) mouseClicked (MouseEvent) mouseEntered (MouseEvent) mouseExited (MouseEvent) mousePressed (MouseEvent) mouseReleased (MouseEvent) mouseDragged ((MouseEvent) mouseMoved (MouseEvent)
MouseEvent
MouseListener
MouseAdapter
MouseEvent
MouseMotionListener
MouseMotionAdapter
Comunicacin Persona-Mquina
40
A. Beln Martnez
Tema 2
ItemEvent
ItemListener
itemStateChanged (ItemEvent)
Cuando se selecciona una casilla de verificacin o una lista de tems Cuando se cambia algo en un cuadro o rea de texto
TextEvent
TextListener
textValueChanged (TextEvent)
...
...
...
...
...
Comunicacin Persona-Mquina
41
A. Beln Martnez