Hola a todos!
Tengo un expediente x con los eventos de un jtextfield. Lo que hago es introducir 9 caracteres (el dni de una persona). Quiero que al introducir el noveno caracter busque en la base de datos a quién corresponde ese dni y me lo escriba en un jlabel que tengo debajo del jtextfield.
Para limitar el jtextfield a 9 caracteres utilizo un jformattedtextfield. Luego escucho los eventos keytyped y cuando se han producido 9 eventos de este tipo supongo que será porque se han tecleado 9 caracteres.
Sin embargo, cuando escribo el primer caracter, se produce el evento keytyped pero la longitud del string es 0!!!!!
Pongo el código y la salida que produce para ver si alguien me puede decir qué es lo que está pasando.
Código:
private JFormattedTextField getDni() {
if (dni == null) {
try{
MaskFormatter mf1 = new MaskFormatter("#########");
dni = new JFormattedTextField(mf1);
dni.setBounds(new Rectangle(108, 27, 178, 32));
dni.addKeyListener(new KeyAdapter(){
public void keyTyped(KeyEvent evt){
i++;
System.out.println("i:"+i);
System.out.println("keytyped_longitud:"+dni.getText().trim().length());
if(dni.getText().trim().length()==9){
System.out.println("entro en 9");
buscarNombre(evt);
}
if((i>9)&&(dni.getText().trim().length()<9)){
//está escribiendo dni otra vez
nombre.setText("");
}
});
}catch(Exception ex){
System.out.println(ex.getMessage());
}
}
return dni;
}
y aquí la salida que produce:
Cita: keypressed0
i:1
keytyped_longitud:0
keypressed1
i:2
keytyped_longitud:1
keypressed2
i:3
keytyped_longitud:2
keypressed3
i:4
keytyped_longitud:3
keypressed4
i:5
keytyped_longitud:4
keypressed5
i:6
keytyped_longitud:5
keypressed6
i:7
keytyped_longitud:6
keypressed7
i:8
keytyped_longitud:7
keypressed8
i:9
keytyped_longitud:8
Muchas gracias!