Crear eventos a tus campos de texto es realmente útil, te permite realizar muchas cosas. Un ejemplo de estas es crear un buscador, al escribir cada letra podrás buscar de manera inmediata en tu base de datos.

Ademas, manejar este tipo de eventos resulta realmente sencillo. Es importante conocer este tipo de eventos, pues te ayudaran a brindar mejor funcionalidad a tu software.

Comencemos hablando de la interfaz DocumentListener, cuenta con 3 métodos sencillos. Los cuales son:

changedUpdate(DocumentEvent e); este método notifica cuando se ha realizado un cambio al documento. Este metodo realmente se ocupa pocas veces. Los siguientes métodos que mencionare son los mas usados al momento de codificar.

insertUpdate(DocumentEvent e); este método se invoca cuando el usuario comienza a insertar texto dentro del campo de texto.

removeUpdate(DocumentEvent e); a diferencia del método anterior, este hace lo contrario. Se activa cuando el usuario comienza a remover o eliminar texto del campo de texto.

Una vez comprendido el funcionamiento de cada método, realizaremos el siguiente ejemplo:

Escribiremos un programa que solo permita insertar como máximo 10 caracteres y  mínimo 8, cuando se exceda el limite, el campo se pondrá en color rojo y cuando se encuentre dentro del rango se pondrá en verde.

Primero comenzaremos creando nuestra ventana, lo podemos realizar mediante el siguiente código:

package eventoscampos;

import javax.swing.JFrame;

public class EventosCampos {

    public static void main(String[] args) {
        PanelCampos panel = new PanelCampos();
        JFrame f = new JFrame("Eventos a campo de texto");
        f.add(panel);
        f.setBounds(150, 100, 800, 600);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setVisible(true);
    }
    
}

Ahora el siguiente paso es crear nuestro panel con el campo de texto, en este caso hemos creado un panel utilizando el administrador de diseño BorderLayout. Ademas, se creo una clase interna llamada ControladorCampos encargada de gestionar los eventos de tipo DocumentListener, debido a que esta clase implementa la interfaz nosotros sabemos que se encarga de gestionar los métodos de este tipo de eventos.

package eventoscampos;

import java.awt.Color;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import javax.swing.text.Document;

public class PanelCampos extends javax.swing.JPanel {

    public PanelCampos() {
        initComponents();
        addEventos(new ControladorCampos());
    }

    public void addEventos(ControladorCampos oyente) {
        Document documento = campoCaracteres.getDocument();
        documento.addDocumentListener(oyente);
    }

    private class ControladorCampos implements DocumentListener {
        
        private int numeroCaracteres;

        @Override
        public void insertUpdate(DocumentEvent e) {
            numeroCaracteres++;
            if(numeroCaracteres >= 8 && numeroCaracteres <= 10) {
                campoCaracteres.setBackground(Color.GREEN);
            }else {
                campoCaracteres.setBackground(Color.RED);
            }
        }

        @Override
        public void removeUpdate(DocumentEvent e) {
            numeroCaracteres--;
            if(numeroCaracteres < 8 || numeroCaracteres > 10) {
                campoCaracteres.setBackground(Color.RED);
            }else {
                campoCaracteres.setBackground(Color.GREEN);
            }
        }

        @Override
        public void changedUpdate(DocumentEvent e) {

        }

    }

    private void initComponents() {
        campoCaracteres = new javax.swing.JTextField();
        setLayout(new java.awt.BorderLayout());
        add(campoCaracteres, java.awt.BorderLayout.CENTER);
    }                     
                  
    private javax.swing.JTextField campoCaracteres;                
}

Tomando en cuenta la descripción del ejercicio que se tenia que realizar, dentro del método insertUpdate si el método se encuentra dentro del rango de 8 a 10 caracteres se pintara de color verde. En caso contrario se pintara de color rojo.

Dentro del método removeUpdate, indicamos que si el método es menor a 8 o mayor a 10 se pinte de color rojo, indicando que no cuenta con los caracteres suficientes. En caso contrario, debe pintarse de verde.

Ahora ya sabes manejar eventos de tipo DocumentEvent, esto te sera de gran utilidad incluso al validar una contraseña o un correo electrónico.

Incluso, si deseas realizar cálculos de cambio al realizar una venta. Podrás simular el calculo del cambio en tiempo real.