Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Tema 2
Eventos
Todo sistema operativo que utiliza interfaces gráficas de usuario debe
estar constantemente monitorizando el entorno para capturar y tratar
los eventos que se producen
1
Tema 2
Eventos en Java
Cada vez que el usuario realiza una determinada acción sobre una
aplicación Java se produce un evento que el sistema operativo
transmite a Java.
Tema 2
2
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 :
Botón sobre el que se pulsa
Etc.
Tema 2
* En este gráfico se
representan algunos de
los eventos más
representativos
3
Tema 2
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)
4
Tema 2
Adaptadores
Los adaptadores (adapter classes) tienen como objetivo evitar la tediosa tarea
de tener que implementar todos los métodos de las interfaces listener.
Por ello existe una clase adaptadora por cada interface listener que tiene más
de un método: MouseAdapter, WindowAdapter, KeyAdapter,
MouseMotionAdapter, FocusAdapter, ContainerAdapter y ComponentAdapter,
etc.
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.
5
Tema 2
Ejemplo 1. ActionEvent
- Cambiar el color del fondo de una ventana pulsando en un botón
Tema 2
Ej. (jButtonAzul)
Click o
ALT+A
Fuente
del
evento
6
Tema 2
•Pulsar un botón
•Seleccionar un elemento de una lista de
selección
•Seleccionar un elemento de un menú
•Pulsar [Enter] en un campo de texto
Tema 2
}
}
7
Tema 2
cambiaColor(e);
}
}
…
private void jbInit(){
…
ProcesaBoton pB = new ProcesaBoton();
…}
}
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 botón)
automáticamente se llama al método apropiado (actionPerformed),
pasándole como parámetro un objeto que es una instancia de
ActionEvent.
8
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);
}…}
} Comunicación Persona-Máquina 17 A. Belén Martínez
Tema 2
9
Tema 2
Tema 2
Paso 1 Paso 2
Paso 3
10
Tema 2
//Inicialización de componentes
private void jbInit() throws Exception {
...
jButtonAzul.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(ActionEvent e) {
cambiaColor(e);
}
};
}
…
void cambiaColor(ActionEvent e) {
contentPane.setBackground(Color.blue);
}
...
} // fin de la clase Marco1
Tema 2
}
Comunicación Persona-Máquina 22 A. Belén Martínez
11
Tema 2
Paso 1
Paso 2
Paso 3
Tema 2
Marco1_jBotonAzul_actionAdapter(Marco1 adaptee) {
this.adaptee = adaptee; Clase Receptora
}
public void actionPerformed(ActionEvent e) {
adaptee.cambiaColor(e);
}
}
Comunicación Persona-Máquina 24 A. Belén Martínez
12
Tema 2
Ejemplo 2. FocusEvent
- Validar la longitud de un campo de texto (JTextField) cuando dicho
componente pierde el foco.
Tema 2
Fuente
del
evento
(tfDNI)
13
Tema 2
Tema 2
14
Tema 2
if (tfDNI.getText().length()!=8)
Clase ProcesaFoco es una
. . .} clase interna de la clase
Marco1 lo que hace que se
pueda invocar el método
compruebaLongitud
class ProcesaFoco implements FocusListener {
directamente
public void focusGained (FocusEvent e){ } // se deja vacío porque no lo utilizamos
compruebaLongitud(e); }
}…
private void jbInit(){
…
ProcesaFoco pF = new ProcesaFoco();
…}
} // fin de la clase Marco1
Comunicación Persona-Máquina 29 A. Belén Martínez
Tema 2
Registro
tfDNI.addFocusListener(pF)
15
Tema 2
Registro (II)
class Marco1 extends JFrame{
…
if (tfDNI.getText().length()!=8)
. . .}
class ProcesaFoco implements FocusListener {
compruebaLongitud(e); }
}…
private void jbInit(){
…
ProcesaFoco pF = new ProcesaFoco();
tfDNI.addFocusListener(pF)
…}
} // fin de la clase Marco1
Comunicación Persona-Máquina 31 A. Belén Martínez
Tema 2
Adaptadores
Los adaptadores (adapter classes) tienen como objetivo evitar la tarea de
tener que implementar todos los métodos de las interfaces listener.
16
Tema 2
Adaptadores (II)
class Marco1 extends JFrame{
…
if (tfDNI.getText().length()!=8)
. . .}
class ProcesaFoco extends FocusAdapter { Solo se proporciona
implementación al método
public void focusLost (FocusEvent e) { focusLost
compruebaLongitud(e); }
}…
private void jbInit(){
…
ProcesaFoco pF = new ProcesaFoco();
tfDNI.addFocusListener(pF)
…}
} // fin de la clase marco
Comunicación Persona-Máquina 33 A. Belén Martínez
Tema 2
17
Tema 2
public Marco1() {
try {
jbInit();
} Clase adaptadora interna de la
catch(Exception e) { clase Marco1 lo que hace que se
e.printStackTrace(); pueda invocar el método
} compruebaLongitud
}
directamente
private void jbInit() throws Exception {
tfDNI.addFocusListener(new java.awt.event.FocusAdapter() {
public void focusLost(FocusEvent e) {
compruebaLongitud(e);
}
});
void compruebaLongitud(FocusEvent e) {
if (tfDNI.getText().length()<8)
{
JOptionPane.showMessageDialog(this,"DNI incorrecto");
tfDNI.setText(" ");
tfDNI.requestFocus();
}
...
} // fin de la clase Marco1
Tema 2
18
Tema 2
void comprobarLongitud(FocusEvent e) {
if (tfDNI.getText().length()<8)
{
JOptionPane.showMessageDialog(this,"DNI incorrecto");
tfDNI.setText(" ");
tfDNI.requestFocus();
}
}
} // fin de la clase Marco1
Tema 2
Eventos - Resumen
19
Tema 2
Tema 2
20
Tema 2
21