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é.