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

Título: Exception NumberFormatException Java validar campo valor vacio o incorrecto
Publicado por: Pepote21 en 31 de Enero 2022, 22:25
Hola a todos.

Tengo una clase Validador en el modelo con el siguiente método:

Código: [Seleccionar]
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:

Código: [Seleccionar]
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.
Título: Re: java resolver Exception campo valor vacio o incorrecto
Publicado por: Kabuto en 01 de Febrero 2022, 06:27
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

Código: [Seleccionar]
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.
Título: Re: java resolver Exception campo valor vacio o incorrecto
Publicado por: Pepote21 en 05 de Febrero 2022, 19:55
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:

Código: [Seleccionar]
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.