Está en la página 1de 10

Guía de Aprendizaje No.

4 – Interfaz Gráfica de Usuario - Eventos

Aprendizajes Esperados: que el estudiante este en la capacidad de implementar eventos en


programas desarrollados en Java, de tipo ActionEvent, FocusEvent, KeyEvent, MouseEvent,
TextEvent, y WindowEvent.

Contenido:

Interfaces Graficas de Usuario –GUI

 Eventos
 ActionEvent
 FocusEvent
 KeyEvent
 MouseEvent
 TextEvent
 WindowEvent

Creación de Interfaces Graficas de Usuario

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.

Este apartado se dedicará al manejo de la segunda opción.

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.

public interface ActionListener {


public void actionPerformed(ActionEvent e);
}

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.

2.1. Alternativas de implementacion de manejo de eventos


A continuacion implementaremos diferentes alternativas de código necesario para constuir la
siguiente GUI, en donde se asocia el evento al boton, de manera que al hacer clic sobre el muestre
el mensaje que aparece en el campo de texto.

Alternativa 1

import java.awt.FlowLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.*;

public class GuiEvent1 extends JFrame implements ActionListener {


private JPanel panel;
private JTextField txtCampo;
private JButton btnBoton;

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í"));
}

//Implementacion del metodo de la Interfaz java.awt.event.ActionListener


public void actionPerformed(ActionEvent e) {
txtCampo.setText("Se presiono el botón" );
}

public static void main (String[] args) {


GuiEvent1 ventana = new GuiEvent1();
}
}

Observaciones de la alternativa 1:

 La clase GuiEvent1, que extiende a JFrame, también define que implementara la interface
ActionListener.

 Al interior de la clase GuiEvent1 debe implementarse (darle cuerpo) al método


actionPerformed.

Alternativa 2

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.FlowLayout;
import javax.swing.*;

public class GuiEvent2 extends JFrame {


JPanel panel;
JTextField txtCampo;
JButton btnBoton;

GuiEvent2() {
configuraPanel();
setSize(300,300);
getContentPane().add(panel);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Registro de manejadores de eventos


btnBoton.addActionListener(new ManejadorEventoBoton());
}

private void configuraPanel() {


panel = new JPanel();
panel.setLayout(new FlowLayout());
panel.add(txtCampo = new JTextField(20));
panel.add(btnBoton = new JButton("Haga clic aquí"));

}
//Clase interna para manejar evento.
class ManejadorEventoBoton implements ActionListener {

public void actionPerformed(ActionEvent e) {


txtCampo.setText("Se presionó el botón ");
}
}

public static void main (String[] args) {


JFrame ventana = new GuiEvent2();
}
}

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.

 Es la clase interna ManejadorEvento, la que implementa la interface ActionListener.

Alternativa 3

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import java.awt.FlowLayout;
import javax.swing.*;

public class GuiEvent3 extends JFrame {


JPanel panel;
JTextField txtCampo;
JButton btnBoton;

GuiEvent3() {
configuraPanel();
setSize(300,300);
getContentPane().add(panel);
setVisible(true);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

//Registra manejador evento


btnBoton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
txtCampo.setText("Se ha presiono el boton");
}
});
}

void configuraPanel() {
panel = new JPanel();

panel.setLayout(new FlowLayout());
panel.add(txtCampo = new JTextField(20));
panel.add(btnBoton = new JButton("Haga clic aquí"));
}

public static void main (String[] args) {


JFrame ventana = new GuiEvent3();

}
}

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

El método moderno de manejo de eventos está basado en el modelo de delegación de eventos; el


cual define mecanismos estándar y consistentes para manejarlos y procesarlos. El concepto consiste
en que existe una fuente que genera un evento y lo envía a uno o más oyentes. En este esquema, el
oyente (listener) aguarda hasta recibir un evento. Una vez recibido, el oyente procesa el evento y
luego lo retorna. La ventaja de este diseño, es que la lógica que procesa los eventos está separada
de la lógica que procesa la interfaz de usuario que genera dichos eventos. Un elemento de interfaz
de usuario puede delegar el procesamiento de un evento a un trozo separado de código. En el
modelo de delegación de eventos, los oyentes deben registrarse con una fuente con el fin de recibir
una notificación de evento.

En el modelo de delegación, un evento es un objeto que describe un cambio de estado en una


fuente. Puede generarse como consecuencia de la interacción de una persona con los elementos
en la interfaz gráfica del usuario, como presionar un botón, ingresar un carácter vía teclado,
seleccionar un elemento de un lista o hacer clic en el mouse.

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:

public vois TipoListener(TipoListsner escuchaEvento)

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:

Public void removeTipoListener(TipoListener escuchaEvento)

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.

Los escuchas de 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

ActionListener actionPerformed(ActionEvent e) ActionEvent Se genera cuando:

Se usa para detectar y


manejar eventos de
acción, ósea, los que  Al pulsar un botón.
 Al hacer doble clic en un
tienen lugar cuando se
elemento de lista.
produce una acción
 Al pulsar INTRO en una
sobre un elemento del
caja de texto.
programa.
 Al elegir un menú.

AdjustmentEvent Se genera cuando se


maneja una barra (scroll)
de desplazamiento.

ComponentEvent Se genera cuando un


componente se oculta, se
mueve cambia de tamaño o
se hace visible

ContaintEvent Se genera cuando se


adiciona o se elimina del
contenedor un
componente.

FocusListener focusGained(FocusEvent e) FocusEvent Se genera cuando un


componente se gana o se
focusLost(FocusEvent e)
pierde el foco

InputEvent

ItemEvent Se genera cuando se hace


clic en una caja de
verificación o en una lista
de elementos. También
ocurre cuando una
selección es hecha o
cuando un elemento del
menú verificable es
seleccionado o
deseleccionado.

KeyListener keyPressed(KeyEvent e) KeyEvent Se genera cuando una


entrada se recibe desde el
Este método se ejecuta cada vez
teclado
que presionas una tecla.
Recibe todos los La clase KeyEvent
eventos del teclado, si keyReleased(KeyEvent e) tiene constantes
presionas una tecla para todas las
Este método se ejecuta cada vez
puedes saber cuál fue. teclas, por ejemplo:
que sueltas una tecla.
Esta interfaz posee
tres métodos que keyTyped(KeyEvent e)
por obligación tienes VK_0, VK_1, VK_2,
que implementar. Este método se ejecuta cada vez
VK_3, VK_4, VK_5,
que se presiona y se suelta una
VK_6, VK_7, VK_8,
tecla.
VK_9.

Esas son las


constantes de los
números, pero sin
contar los del
teclado numérico
de la izquierda de
tu teclado ya que
para esos números
también hay
constantes pero
son así:
VK_NUMPAD0, VK
_NUMPAD1 ...

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.

MouseEvent Se genera cuando el mouse


se arrastra o se mueve, se
hace clic, se presiona o se
libera, también se genera
cuando el mouse introduce
o saca un componente.

WindowEvent Se genera cuando una


ventana es activada,
desactivada, cerrada,
minimizada, maximizada,
abierta o cerrada.

TextEvent Se genera cuando el valor


de un área de texto o
campo de texto se cambia.

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 2. Diseñe la siguiente GUI:


Implemente el código necesario para que al hacer clic sobre los botones del panel izquierdo se
muestre en el área de texto la cadena del botón en el respectivo color, y al seleccionar los
botones del panel derecho el área de texto aparezca en el respectivo color del botón, al igual
que los botones del panel inferior.

Nota: debe utilizar el Layout: BoxLayout.

Actividad 3. Realice un programa que permita convertir grados centígrados a grados Fahrenheit.

Actividad 5. Realice un programa Java, en donde implemente los siguientes eventos:

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

También podría gustarte