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.

Compartir

3 comentarios

  1. Andrés

    Muy buenas primero agradecerte todo el esfuerzo que haces por subir vídeos explicandolo todo paso a paso , con este tema tendría y es que si tengo un campo en el que quiero meter un formato de DNI como lo podría hacer ? osea 74142569H por ejemplo . Gracias y un saludo desde Granada

  2. edwin

    que evento debería generar para consumir este método. keypressed o cual? no me elimina cuando escribo un digito con el metodo evt.getconsume();
    te agradezco!!

  3. xiangn

    Me funciono. Tenia rato buscado una validacion asi. Tendras una para validar correo electronico? Gracias

Deja una respuesta

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