Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Pepote21 en 31 de Enero 2022, 22:25
-
Hola a todos.
Tengo una clase Validador en el modelo con el siguiente método:
public DefaultFormatterFactory validarDosEnteros(){
nf=NumberFormat.getNumberInstance();
nf.setParseIntegerOnly(true);
nf.setMaximumIntegerDigits(2);
nft=new NumberFormatter(nf);
nft.setAllowsInvalid(false);
dff=new DefaultFormatterFactory(nft);
return dff;
}
Tengo la clase Controlador donde tengo:
getFtfNumSala().setFormatterFactory(validador.validarDosEnteros());
listado=getObjSdao().read(); //saber los registros de la db
El problema que tengo es que me encuentro en un formulario con un JFormattedTextField que inicialmente está vacio y cuando introduzco un dato correcto de la base de datos, todo funciona bien al pulsar el botón LEER. Pero si pulso el botón LEER con el JFormattedTextField vacio o introduciendo un dato incorrecto (o eliminado) de la base de datos me causa una Exception NumberFormatException.
Llevo ya un par de días sin poder resolverlo. A ver si alguien me echa una mano.
De antemano gracias y un saludo a todos.
-
Mmmhh..
NumberFormat sirve para dar formato a los valores, o sea, para indicar como queremos que se muestren.
Pero no es un sistema de validación como tal.
Si quieres validar ese campo, en el ActionListener de ese botón LEER puedes poner validaciones antes de aceptar el valor de dicho campo y trabajar con él.
Por ejemplo
if (campo.isBlank()) //Comprobamos campo no está vacío
JOptionPane.showMessageDialog(null, "El campo no puede estar vacío");
else {
String texto = campo.getText();
//Comprobamos tiene dos caracteres, para poder crear un valor de dos enteros
if (texto.length() != 2)
JOptionPane.showMessageDialog(null, "El campo ha de tener dos caracteres");
else {
try {
//Intentamos convertir el valor del campo a un Integer, si falla, se lanzará excepción
Integer valor = Integer.parseInt(texto);
//El parseo ha funcionado, el valor es correcto.
/*
* Aquí vendría el código para trabajar con ese valor ya validado....
*/
}
catch(NumberFormatException ex) { //Aquí capturamos excepción para cuando falle el parseo a Integer
JOptionPane.showMessageDialog(null, "El campo ha de tener un valor numérico");
}
}
}
Como digo, es un ejemplo. Intenta adaptarlo a tu código y a las necesidades de tu programa.
Saludos.
-
Gracias Kabuto. No había visto el correo hasta ahora. Mi problema era debido a que no había comprobado listado=getObjSdao().read(); .Esto me funcionaba en su clase donde lo había comprobado pero no en esta, de ahí mi error de primer curso. Me han ayudado porque como la comprobación inicial funcionaba me había cegado en otra parte del código.
Agradezco tu solución que después comprobaré, pero muestro la que he hecho en este momento, que es esta:
listado=getObjSdao().read();
for(int i=0;i<listado.size();i++){
sala=(Sala) listado.get(i);
if(sala.getNumSala()==numRegistro){
break;
}
}
if(sala.getNumSala()==numRegistro){
loadFormulario(sala);
}else{
JOptionPane.showMessageDialog(getObjM(), "No existe registro con el valor introducido.");
}
Un saludo a todos.