Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Contenido:
Eventos
ActionEvent
FocusEvent
KeyEvent
MouseEvent
TextEvent
WindowEvent
2. Eventos
Si usted desea ordenar al programa que realice alguna tarea o acción cuando suceda algo (un
evento) sobre un objeto; por ejemplo al hacer clic sobre el botón “Calcular nomina”, el software
debe realizar los respectivos cálculos y desplegarlos por pantalla, se debe realizar la respectiva
implementación.
Java provee varios manejadores de eventos, cada uno de los cuales maneja un tipo particular de
eventos. Por ejemplo WindowsListener permite a una ventana responder a las acciones que ocurren
sobre ella (eventos de tipo WindowsEvent), como minimizarla, abrirla, moverla, etc. y
ActionListener permite a un componente responder a las acciones que ocurren sobre el (acciones
de tipos ActionEvent), como un clic sobre un botón.
De manera que para poder manejar eventos, por ejemplo cuando un boton es presionado por el
usuario, existen basicamente dos alternativas:
Crear un objeto que periodicamente este chequeando el estado del boton para saber si h
sido presionado o no.
Que el propio boton le avise a un objeto cuando el usuario lo haya presionado.
Para el manejo de esta segunda opción, el objeto debe informar del evento (por ejemplo un clic) a
unos observadores o escuchas, quienes previamente deben haberse registrado como tales. Para
realizar lo anterior, en el contexto de la POO, es necesario el llamado de un metodo. Con el fin de
garantizar la invocacion de un metodo comun a todos los escuchas, se hace necesario que estos
objetos sean de clases que implementen una interface especifica todo esto porque puede haber
escuchas de diversos tipos de clases.
En Java, para que un objeto se pueda declarar como interesado en los eventos que le ocurren a un
boton, su clase debe implementar la interface java.awt.event.ActionListener, y debe sucribrse
explicitamente como escucha del boton, empleando el metodo addActionListener de la classe
JButton. Esta interface se encuentra definida como se muestra en el siguiente código.
La interface solo posee un metodo que se ejecutará cuando se presione el botón java, el
parametro que se recibe, java.awt.event.ActionEvent, guarda informacion sobre el evento.
Alternativa 1
import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;
GuiEvent1() {
configuraPanel();
setSize(500,200);
getContentPane().add(panel);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
//Registra escuchas
btnBoton.addActionListener(this);
}
void configuraPanel() {
panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.add(txtCampo = new JTextField(20));
panel.add(btnBoton = new JButton("Haga clic aquí"));
}
Observaciones de la alternativa 1:
La clase GuiEvent1, que extiende a JFrame, también define que implementara la interface
ActionListener.
Alternativa 2
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.FlowLayout;
import javax.swing.*;
GuiEvent2() {
configuraPanel();
setSize(300,300);
getContentPane().add(panel);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
//Clase interna para manejar evento.
class ManejadorEventoBoton implements ActionListener {
Observaciones de la alternativa 2:
En java dentro de la definición de una clase es permitido definir nuevas clases, a lo que se
le da el nombre de clases internas. Este tipo de clases no pueden declararse como públicas,
y tienen acceso a todos los atributos y métodos de la clase donde se encuentran contenidas,
aunque sean privadas o protegidas.
Alternativa 3
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.FlowLayout;
import javax.swing.*;
GuiEvent3() {
configuraPanel();
setSize(300,300);
getContentPane().add(panel);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
void configuraPanel() {
panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.add(txtCampo = new JTextField(20));
panel.add(btnBoton = new JButton("Haga clic aquí"));
}
}
}
Observaciones de la alternativa 3:
Esta última alternativa presenta de nuevo una clase interna pero anónima, es decir sin
nombre. Para definir este tipo de clases basta con especificar la instrucción new junto con
el tipo de elemento a crear (que bien puede ser una clase o una interface) y ubicar entre
llaves la definición de los métodos o atributos que sean necesarios.
Esta alternativa es la más utilizada por herramientas que facilitan el desarrollo de las GUI y
es la que vamos a utilizar para desarrollar este tema durante el curso.
Delegación de evento
Fuentes de eventos
Una fuente de eventos es un objeto que genera un evento. Una fuente debe registrar oyentes con
el fin de que reciban notificaciones acerca de un tipo específico de eventos. Cada tipo de evento
tiene su método propio método de registro.
Sintaxis:
TipoListener es el nombre del evento y escucha evento es una referencia al oyente del evento. Por
ejemplo el método que registra un escucha de evento de teclado se llama addKeyListener(). El
método que registra un oyente de movimiento de mouse se llama addMouseMotionListener().
Cuando un evento ocurre, todos los oyentes registrados son notificados y reciben una copia del
objeto evento.
Una fuente tambien provee el método que remueve un escucha. Su sintaxis es:
Por ejemplo para remover un escucha del teclado se debe llamar removeKeyListener().
Los métodos que adicionan o remueven oyentes del teclado son provistos por la fuente que genera
los eventos.
Un escucha es un objeto que se notifica cuando un evento ocurre. Tiene dos requerimientos
principales. Primero debe haber sido registrado por una o más fuentes (objetos) para recibir
notificaciones acerca de tipos específicos de eventos. Segundo, debe implementar métodos para
recibir y procesar esas notificaciones. Los métodos que reciben y procesan eventos, están definidos
en conjunto de interfaces del paquete java.awt.event. Por ejemplo la interfaz
MouseMotionListener define dos métodos que reciben notificaciones cuando el mouse se arrastra
o se mueve. Muchos objetos pueden recibir y procesar uno o ambos de estos eventos si provee una
implementación de esta interfaz.
Clases de eventos
Interfaz Métodos Evento Descripción
InputEvent
Además con el
método
KeyEvent.getKeyCo
de(), puedes saber
el código de la
tecla que se pulso y
puedes comparar
ese código con las
constantes.
Actividad 1. Agregue el código necesario para adicionar un nuevo botón al panel, y mostrar en el
campo de texto en cual botón se hizo clic. Así:
Actividad 3. Realice un programa que permita convertir grados centígrados a grados Fahrenheit.
o ActionEvent
o FocusEvent
o KeyEvent
o MouseEvent
o TextEvent
o WindowEvent
Webgrafia:
https://www.youtube.com/watch?v=zj0Whq2laIE
https://www.fdi.ucm.es/profesor/jpavon/poo/Tema6resumido.pdf
https://campusvirtual.univalle.edu.co/moodle/pluginfile.php/490156/mod_resource/cont
ent/0/Clase%209%20-%20Interfaces%20Graficas.pdf