Permitir escribir solo letras en un JTextField en Java

Hola a todos, hoy os explicaré como podemos escribir solo letras en un JTextField en una interfaz gráfica de Java.

A veces, la mejor forma de validar un campo, es no permitiendo que pueda poner los caracteres que no queremos que el usuario ponga.

Empezaremos con lo más fácil, que es creando la interfaz, algo como esto:

Por supuesto, es un ejemplo, el diseño podéis adaptarlo al gusto. Fijaros que he puesto un JLabel oculto en la interfaz. Esto es opcional.

Ahora, vamos a usar un tipo de evento del JTextField del tipo Key, más concretamente KeyTyped. Es el más adecuado.

El codigo que vamos a poner en este evento es este:


if (!Character.isLetter(evt.getKeyChar())
                && !(evt.getKeyChar() == KeyEvent.VK_SPACE)
                && !(evt.getKeyChar() == KeyEvent.VK_BACK_SPACE)) {
      evt.consume();
      lblErrorLetra.setText("Escribe solo letras");
} else {
      lblErrorLetra.setText("");
}

evt.consume(); lo que hace es eliminar la letra que hemos insertado. En este caso, si no es una letra y no es un espacio o un retroceso consume la letra y muestra el error en el label. Si no queréis usar el JLabel simplemente borrar las lineas con el JLabel.

Esto hará que cada vez que escribamos un número u otro carácter no permitido, no aparecerá esa letra y el mensaje aparece.

Cuando escribimos algún carácter válido desparece el mensaje

Os dejo el código en función por si la queréis tener centralizada:

—Con JLablel—

    /**
     * Restringe el texto solo a letras y espacios. Escribe el aviso en el JLabel pasado.
     * @param evt Evento
     * @param etiquetaError JLabel donde se imprime el error  
     */
    public static void escribirSoloLetrasYEspacios(KeyEvent evt, JLabel etiquetaError){
        if(!Character.isLetter(evt.getKeyChar()) && !(evt.getKeyChar()==KeyEvent.VK_SPACE) && !(evt.getKeyChar()==KeyEvent.VK_BACK_SPACE)){
            evt.consume();
            etiquetaError.setText("Escribe solo letras");
        }else{
            etiquetaError.setText("");
        }
    }

—Sin JLabel—


  /**
     * Restringe el texto solo a letras y espacios. Escribe el aviso en el JLabel pasado.
     * @param evt Evento
     * @param etiquetaError JLabel donde se imprime el error  
     */
    public static void escribirSoloLetrasYEspacios(KeyEvent evt){
        if(!Character.isLetter(evt.getKeyChar()) && !(evt.getKeyChar()==KeyEvent.VK_SPACE) && !(evt.getKeyChar()==KeyEvent.VK_BACK_SPACE)){
            evt.consume();
        }
    }

Por último, también os dejo el proyecto para que lo descarguéis y lo probéis. Lo puedes descargarlo aquí.

La única forma de poner caracteres no validado es pegando desde el portapapeles, esto es algo que veremos como se

Espero que os sea de ayuda. Si tenéis dudas, preguntad. Estamos para ayudarte.

¿Te ha gustado y quieres apoyarme? ¡Sé mi patrón!
Etiquetas

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *