Mensaje para Chuidiang

saronai
19 de Febrero del 2006
Hola

He leido en tu pagina que para limitar los caracteres de un textfield se puede hacer con un limitador , pero como podría hacer para que de la cantidad de caracteres que le inserto mire si todos son numeros menos el ultimo que tiene que ser una letra (A-Z)?

Te agradezco tu ayuda de antemano

chuidiang
19 de Febrero del 2006
Hola:

Depende un poco de lo que quieras.

Con el limitador puedes hacerlo, simplemente cambia la condición para aceptar o no la entrada. Recoge el texto del JTextField, mira la inserción que se está intentando hacer y comprueba si vale o no.

Si te vale escribir mal y comprobarlo al final (por ejemplo, al pulsar un botón de Aceptar), puedes usar lo que te propone Nodo. Quizás tengas que adaptarlo un poco, puesto que Nodo comprueba ocho digitos.

Si quieres que no se pueda escribir mal, aparte del limitador, puedes usar el JFormattedTextField, como te propone Diego. En vez de un DecimalFormat pásale un MaskFormatter. Este admite una máscara del estilo "###U", de forma que las # son dígitos y U es cualquier letra mayúscula. La pega es que te obliga a meter 3 dígitos.

Se bueno

NoDo
19 de Febrero del 2006
Hola!
Puedo contestar yo?
Creo que puedes hacer de la siguiente manera:

String cadena = campo.getText();
for(int i=0;i<8;i++){
if(!(Character.isDigit(cadena.charAt(i))){
//Error, no ha insertado 8 números
}
}//for
//Para la letra...
if(Character.isLetter(cadena.charAt(cadena.lenght-1)){
//Correcto, la última posición es una letra.
}

Bien, espero haberte ayudado.
Un saludo!!

Diego
19 de Febrero del 2006
Hola, te recomiendo que te pases de AWT a SWING que es más avanzado y permite realizar más operaciones de forma automática. Por ejemplo, el equivalmente al TextField es el javax.swing.JTextField, que tiene una subclase llamada JFormattedTextField que permite hacer que acepte un determinado formato. Lo que tu quieres sería así, más o menos:

import java.text.DecimalFormat;
import javax.swing.*;
...
JFormattedTextField cuadro=new JFormattedTextField(new DecimalFormat(("\d+[a-zA-Z]"));
...

No he probado el componente, he comprobado que la expresión regular es correcta(al menos un dígito y un carácter alfabético al final), con el siguiente main, en el que se prueban las cadenas introduciendolas introduciendo una y pulsando intro:

java.util.Scanner in=new java.util.Scanner(System.in);
while(in.hasNextLine())
System.out.println(in.nextLine().matches("\d+[a-zA-Z]"));