El manejo de eventos de accion es uno de los eventos mas sencillos de implementar. Debido a que solamente consta de un metodo. Sin embargo, es uno de los mas usados, pues permite agregar eventos de tipo accion (al presionar) en algunos componentes.

Algunos componentes donde puede aplicarse el evento de tipo accion son: los botones, JTextField. Para los botones el metodo se invoca al momento de presionar, en JTextField funciona de manera diferente y este metodo se llama cuando el usuario hace un enter.

Para aplicar este evento realizare un ejemplo sencillo, consta de un boton. Sin embargo, cuando el usuario presiona este boton el color de fondo se cambia.  Ademas, si presiona nuevamente el boton, el fondo cambia a un color diferente.

Primero crearemos nuestro marco y panel. Dentro del panel agregaremos el boton:

package eventoaccion;

import javax.swing.JFrame;

public class EventoAccion {

    public static void main(String[] args) {
        JFrame f = new JFrame("Evento de Accion");
        f.add(new PanelAccion());
        f.setBounds(100, 200, 500, 400);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
    
}
package eventoaccion;

import java.awt.BorderLayout;
import javax.swing.JButton;
import javax.swing.JPanel;

public class PanelAccion extends JPanel {
    
    public PanelAccion() {
        addComponentes();
    }
    
    public void addComponentes() {
        setLayout(new BorderLayout());
        JButton cambiarColorFondo = new JButton("Cambiar Color de Fondo");
        cambiarColorFondo.addActionListener(new OyenteAccion(this));
        add(cambiarColorFondo, BorderLayout.NORTH);
    }
    
}

Para agregar el evento (poner a la escucha) lo hacemos con el metodo addActionListener, por parametro recibe un objeto de tipo ActionListener.

ActionListener es una interfaz, solo contiene un metodo. A diferencia de las demas interfaces de eventos, este tipo de evento no contiene una clase adaptadora pues tan solo tiene un metodo y no tendria sentido. El metodo es:

actionPerformed: este metodo es llamado cuando se realiza una accion (se presiona un boton o presionan enter dentro de un campo de texto).

A continuacion debemos crear la siguiente clase, donde se implementa la interfaz y el metodo invocado del evento. Dentro del metodo agregaremos el codigo necesario para cambiar el fondo de pantalla con diferentes colores:

package eventoaccion;

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

public class OyenteAccion implements ActionListener {
    
    private PanelAccion panel;
    
    public OyenteAccion(PanelAccion panel) {
        this.panel = panel;
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        int r = (int) (Math.random() * 256);
        int g = (int) (Math.random() * 256);
        int b = (int) (Math.random() * 256);
        panel.setBackground(new Color(r, g, b));
    }
    
}

Sabemos que el codigo de colores RGB, tiene un rango de valores de 0 a 255. Por este motivo se crean tres variables de tipo entero.

¿Por que se multiplica por 256?
Cuando realizamos un casting a entero, siempre se toma en cuenta solo la parte entera. Ejemplo:

Supongamos que Math.random genera el numero 0.9999 y este valor se multiplica con 255. El resultado es: 254.9745 y haciendo el casting a entero el resultado final es: 254.

Podras observar que nunca tomaremos en cuenta el valor 255 si  realizamos la multiplicacion por el mismo. Por este motivo, multiplicamos por 256, si haces las operaciones correspondientes mostradas anteriormente podras notar que el resultado final es 255.

Lo explicado acerca de los colores, no es realmente el tema. Pero, me parece interesante y algo importante que conozcas este tipo de cosas, pues a futuro pueden ser de gran ayuda.