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.
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
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!!
Me funciono. Tenia rato buscado una validacion asi. Tendras una para validar correo electronico? Gracias