Filtro

Hola todoswing
Es la primera vez que me dirijo a ti.
Estoy realizando un proyecto, y tengo un problemilla
Estoy buscando ejemplos de como hacer un filtro para jtext. De forma que solo permita introducir, o un número, o una fecha valida, o cualquier carácter que haya yo decidido. Hace tiempo por casualidad lo había encontrado en Internet, pero ahora que me hace falta, ya llevo unos cuantos días buscando y nada.
Te agradecería me indicases donde encontrar información puntual del tema.
Muchas gracias de antemano.

1 Respuesta

Respuesta
1
En la clase JTextField existe un método que se llama setInputVerifier al que se le pasa como parámetro un objeto de una clase que implemente el interfaz InputVerifier. Cada vez que el componente pierde el foco se llama al método verify del objeto que has pasado como parámetro, que es el encargado de comprobar que la entrada en correcta. Lo que tienes que hacer es una clase que implemente el interfaz InputVerifier e implementar el método verify de forma que realize la prueba que tu necesitas.
De todas formas te mando un ejemplo de una clase InputVerifier que testea que el valor del campo sea de tipo float.
public class FloatVerifier extends InputVerifier
{
public boolean verify(JComponent comp)
{
String txt;
float valor;
txt=((JTextField)comp).getText();
if(!txt.equals(""))
{
try
{
valor=Float.parseFloat(txt);
}
catch(Exception e)
{
JOptionPane.showMessageDialog(null,"No se permiten caracteres Alfanuméricos","Formato Incorrecto",JOptionPane.ERROR_MESSAGE);
((JTextField)comp).selectAll();
return false;
}
if(valor<=0)
{
JOptionPane.showMessageDialog(null,"El valor deve de ser positivo","Valor Incorrecto",JOptionPane.ERROR_MESSAGE);
((JTextField)comp).selectAll();
return false;
}
else
{
return true;
}
}
else
{
return true;
}
}
}
Hola todoswing. Muchas gracias por tu tiempo y tu ejemplo. Tu ejemplo me vale, pero no es exactamente para lo que necesito, mis disculpas, pues fui yo quien lo explico mal.
La gente que va a usar el programa, no es muy cualificada, y cuando tenga que filtrar un float, por ejemplo, que solo permita introducir números y un punto. Cuando sea fecha, solo números la barra, y en la cantidad deseada. Es decir, ir filtrando a medida que se teclea comprobando carácter a carácter.
Gracias, y me parece una gran labor la que estáis llevando a cabo todos los expertos.
Es posible hacer lo que dices aunque es algo más complejo que lo que te he propuesto.
En mi opinión el método anterior es más elegante y practico, puesto que, cada vez que el usuario cometa un error le saldrá un texto explicativo que lo ayudara a encontrar el fallo, de la otra forma solo tendrá un bloqueo del teclado sin información alguna.
Pero de todas formas te comento como hacerlo.
Cada vez que se pulsa una tecla se genera un evento. Para controlar que la tecla es correcta tu solamente tienes que insertar un manejador de eventos (listener) que te permita controlar que tecla se ha pulsado y ejecutar una acción en el caso que sea necesario. Para añadir un manejardor simplemente debes invocar al método addKeyListener (lo tienen todas las clases que heredan de Component), a este método debes de pasarle como parámetro un objeto de una clase que implemente el interfaz KeyListener (esta parte la tienes que implementar tu).
Cada vez que se pulse una tecla el sistema invocara al método KeyPressed del listener que has creado y se le pasara como parámetro un objeto de tipo KeyEvent, que te permitirá conocer cual es la tecla que se ha pulsado.
En este punto ya solo te queda comprobar que la tecla pulsada es correcta o no y realizar un acción al respecto.
Muchas gracias, por los dos consejos, después de pensarlo, creo que tienes toda la razón y que el primer método es más elegante. Muchas gracias y sigue así

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas