Mostrando entradas con la etiqueta caracteres. Mostrar todas las entradas
Mostrando entradas con la etiqueta caracteres. Mostrar todas las entradas

viernes, 1 de abril de 2011

Otra forma de Limitar la cantidad de caracteres, números o decimales en java

Para mejorar la restricción a un JTexBox se puede usar la propiedad "setDocument" de los
cuadros de texto en java, de la siguiente forma.

JTextBox txt=new JTextBox();
txt.setDocument(new LimitadorCadena(txt,20));
En este ejemplo podemos ver que el modo de usando el segundo parametro para indicar
cuantos caracteres son permitidos.

JTextBox txt=new JTextBox();
txt.setDocument(new LimitadorDecimal(txt,10,3));
En este otro ejemplo se muestra el uso para restringir el ingreso de números decimales.

JTextBox txt=new JTextBox();
txt.setDocument(new LimitadorEnteros(txt,10));
No creo que necesite explicación.
(claro hay que poner las clases en el mismo paquete)

La magia se encuentra en las clases "Limitar" Decimales, Enteros y Cadena.
(cualquier duda o mejora aquí pueden publicarla con confianza)

En todas las clases el truco es sobrecargar el método "insertString" de PlainDocument.

Descargar
Esta es una solución mejorada de la que publiqué hace algún tiempo...
perdón por no dar mucha explicación.

viernes, 10 de septiembre de 2010

Limitar la cantidad de números en java

Para poder limitar el numero de caracteres en un cuadro de texto en java no es posible (de manera sencilla) con el JTextField.

pero podemos contar con el "JFormattedTextField", con el cual podemos hacer varias limitaciones.

Específicamente para limitar el numero de caracteres con este control, lo podemos hacer la siguiente manera:

try{
String mascara="";
//algunas de las posibilidades pueden ser:
mascara="##.##";
//mascara="##/##/####";
//mascara="##:##:##";
/*el problema de las mascaras anteriores es que no son flexibles es decir si no se
cumple exactamente la mascara automáticamente ignora lo que se le escribió.
por ejemplo si se necesita una casilla que acepte como máximo números de longitud 5 y se escribe "25" para esta mascara no será valido, sería valido si se pusiera "00025" cosa que no es práctica.

para que esto sea posible podemos hacerlo de la siguiente manera:
mascara="*****"; pero esta nos da una desventaja que acepta cualquier carácter (no solo números, si es lo que se desea hasta aquí sería suficiente) pero si nos da la posibilidad de poner únicamente los caracteres necesarios, es decir nos acepta tanto "k4k5j" como "j6".
*/
MaskFormatter mask=new MaskFormatter(mascara);
JFormattedTextField textoLimitar=new JFormattedTextField(mask);
}
//para completar la solución (limitar la cantidad de números en una casilla) se debe de
//escribir el siguiente código para aceptar únicamente números.

textoLimitar.addKeyListener(this); // para agregarle eventos


public void KeyPressed(KeyEvent evt){
if(evt.getSource()==textoLimitar){
if (!Character.isDigit(evt.getKeyChar()) && teclas(evt.getKeyCode()) )
evt.consume();
}
}
public void KeyTyped(KeyEvent evt){
if(evt.getSource()==textoLimitar){
if (!Character.isDigit(evt.getKeyChar()) && teclas(evt.getKeyCode()) )
evt.consume();
}
}
public boolean teclas(int keyCode) {
if ( keyCode!=KeyEvent.VK_BACK_SPACE &&
keyCode!=KeyEvent.VK_DELETE &&
keyCode!=KeyEvent.VK_LEFT &&
keyCode!=KeyEvent.VK_RIGHT &&
keyCode!=KeyEvent.VK_HOME &&
keyCode!=KeyEvent.VK_END
)
return true;
else return false;
}

Esta es la mejor solución que encontré.