Validación de números decimales en un jtextfield en java

publicado por: Anonymous

Quiero validar en un jtexfield que el usuario solo introduzca o un numero o un . pero que pueda introducir solo un punto no varios, es decir 3.3 no 3..3, tengo este código pero no se como hacer que no me introduzca los puntos repetidos, yo creo un jtexfield desde código aquí esta el código.

NumerosDeLaRestriccion[y] = new JTextField();
            NumerosDeLaRestriccion[y].setSize(50, 25);
            NumerosDeLaRestriccion[y].setLocation(Columna, fila);
            NumerosDeLaRestriccion[y].addKeyListener(new KeyAdapter() {
                @Override
                public void keyTyped(KeyEvent e) {
                    char caracter = e.getKeyChar();
                    if (((caracter < '0') || (caracter > '9')) && (caracter != KeyEvent.VK_BACK_SPACE)
                            && (caracter != '.') ) {
                        e.consume();
                    }
                }
            });

solución

En la manera que lo haces ahora solamente controlas las teclas permitidos. Si quieres asegurarte que el formato entero es valido (con un solo punto) tienes que buscarte el acceso al contenido entero del JTextField y comprobarlo (por ejemplo con un regex o contains):

NumerosDeLaRestriccion[y].setLocation(Columna, fila);
final TextField miJTextField = NumerosDeLaRestriccion[y];

if (((caracter < '0') || (caracter > '9')) 
        && (caracter != KeyEvent.VK_BACK_SPACE)
        && (caracter != '.' || miJTextField.getText().contains(".")) ) {
            e.consume();
}

significando:

Si la tecla no es un “.” o si es un “.” y el JTextField ya contiene uno (o mas) => e.consume()

Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *