Interfaz Gráfica de Usuario

Eventos en Swing

Aprende a manejar eventos en aplicaciones Swing utilizando ActionListener y otros listeners.

En esta sección, aprenderemos cómo manejar eventos en aplicaciones Swing. Los eventos son acciones que ocurren en la interfaz gráfica, como hacer clic en un botón o seleccionar un elemento de una lista. Para responder a estos eventos, utilizamos listeners, que son interfaces que definen métodos para manejar diferentes tipos de eventos.

ActionListener

La interfaz ActionListener es una de las interfaces más comunes para manejar eventos en Swing. Se utiliza principalmente para responder a acciones como hacer clic en un botón. Para implementar un ActionListener, debemos crear una clase que implemente esta interfaz y sobrescribir el método actionPerformed.

Veamos un ejemplo de cómo usar ActionListener con un botón:

import javax.swing.JButton;
import javax.swing.JFrame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class ButtonExample {
    void main(String[] args) {
        JFrame frame = new JFrame("Ejemplo de ActionListener");
        JButton button = new JButton("Haz clic aquí");

        // Agregar ActionListener al botón
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                IO.println("¡Botón clickeado!");
            }
        });

        frame.add(button);
        frame.setSize(300, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

En este ejemplo, hemos creado un botón y le hemos agregado un ActionListener. Cuando el botón es clickeado, se ejecuta el método actionPerformed, que imprime un mensaje en la consola.

Clases Anónimas y Expresiones Lambda v.s. Clases Separadas

En el ejemplo anterior, utilizamos una clase anónima para implementar el ActionListener. Esto es útil para mantener el código conciso cuando la implementación del listener es corta. Sin embargo, también podemos crear una clase separada que implemente ActionListener, especialmente si la lógica es más compleja o si queremos reutilizar el listener en varios lugares. Aquí hay un ejemplo de cómo hacerlo:

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

public class MiActionListener implements ActionListener {

    public MiActionListener() {

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        IO.println("¡Botón activo desde clase separada!");
    }
}
import javax.swing.JButton;
import javax.swing.JFrame;

public class ButtonExampleWithSeparateClass {
    void main(String[] args) {
        JFrame frame = new JFrame("Ejemplo con Clase Separada");
        JButton button = new JButton("Haz clic aquí");

        // Agregar ActionListener usando una clase separada
        button.addActionListener(new MiActionListener(button, frame));

        frame.add(button);
        frame.setSize(300, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}

En este caso, hemos creado una clase MiActionListener que implementa ActionListener. Luego, en la clase principal, instanciamos esta clase y la pasamos al botón. Esto es especialmente útil si el listener tiene lógica compleja o necesita acceder a otros componentes de la interfaz.

Otros Listeners Comunes

Además de ActionListener, Swing proporciona varios otros listeners para manejar diferentes tipos de eventos. Algunos de los más comunes incluyen:

ListenerDescripción
MouseListenerManeja eventos relacionados con el mouse, como clics y movimientos.
KeyListenerManeja eventos de teclado, como presionar y soltar teclas.
WindowListenerManeja eventos relacionados con la ventana, como abrir y cerrar.
ItemListenerManeja eventos de selección en componentes como listas y checkboxes.

Cada uno de estos listeners tiene métodos específicos que debemos implementar para manejar los eventos correspondientes. A medida que avancemos en el desarrollo de aplicaciones Swing, exploraremos cómo utilizar estos listeners para crear interfaces interactivas y responsivas.

Copyright Jesús Aurelio Castro Magaña © 2026