Вы находитесь на странице: 1из 14

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 1 of 14

Divide & Conquer


$divideandconquer = Array (Php, Java, C, Mas);
OCT 03

Limitar caracteres en un JTextfield


Java

Agregar comentario

Por diversas razones tenemos la necesidad de evitar que un usuario ingrese ya sea nmeros, letras, ciertos caracteres especiales o ms de un nmero mximo de caracteres. Para lograr estos objetivos voy a mostrar algunos de ejemplos de clases que implementan algun tipo de limitacin en los datos ingresados. Primer ejemplo: Limitar el jTextField a solo letras y espacios. Nombre de la clase: LimitadorSoloLetras.java

import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; /** * @author Hernn */ public class LimitadorSoloLetras extends PlainDocument{ public void insertString(int arg0, String arg1, AttributeSet arg2) throws BadLocationException { for (int i=0;i<arg1.length();i++) if (!Character.isLetter(arg1.charAt(i)) && !Character.isSpaceChar(arg1.charAt(i))) return; super.insertString(arg0, arg1, arg2); } }

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 2 of 14

Modo de uso: supongamos que tenemos un JTextField llamado txtNombres, entonces lo que tenemos que hacer es:

txtNombres.setDocument(new LimitadorSoloLetras()); Segundo Ejemplo: Limitar el jTextField a solo nmeros. Nombre de la clase: LimitadorSoloNumeros.java

import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; /** * @author Hernn */ public class LimitadorSoloNumeros extends PlainDocument{ public void insertString(int arg0, String arg1, AttributeSet arg2) throws BadLocationException { for (int i=0;i<arg1.length();i++) if (!Character.isDigit(arg1.charAt(i))) return; super.insertString(arg0, arg1, arg2); } } Modo de uso: supongamos que tenemos un JTextField llamado txtDNI, entonces lo que tenemos que hacer es:

txtDNI.setDocument(new LimitadorSoloNumeros()); Tercer Ejemplo: Limitar el jTextField a solo letras y espacios y adems limitar la cantidad de caracteres ingresados. Nombre de la clase: LimitadorSoloLetrasNroMax.java

import javax.swing.JTextField; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException;

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 3 of 14

import javax.swing.text.PlainDocument; /** * @author Hernn */ public class LimitadorSoloLetrasNroMax extends PlainDocument{ private JTextField miJTextField; private int nroMaxCaracteres; public LimitadorSoloLetrasNroMax(JTextField mijtext, int nroMaxCaract){ miJTextField=mijtext; nroMaxCaracteres=nroMaxCaract; } public void insertString(int arg0, String arg1, AttributeSet arg2) throws BadLocationException { for (int i=0;i<arg1.length();i++) if ((!Character.isLetter(arg1.charAt(i)) && !Character.isSpaceChar(arg1.charAt(i)))||(miJTextField.getText().length()+arg1.length return; super.insertString(arg0, arg1, arg2); } } Modo de uso: supongamos que tenemos un JTextField llamado txtApellidos, entonces lo que tenemos que hacer es:

txtApellidos.setDocument(new LimitadorSoloLetrasNroMax(txtApellidos,30)); Cuarto Ejemplo (a pedido de trancelex): Limitar el jTextField a solo letras y espacios, y adems cuando se llegue al nmero maximo pasar al prximo campo. Nombre de la clase: LimitadorSoloLetrasNroMaxV2.java

import javax.swing.JTextField; import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument;

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 4 of 14

/** * @author Hernn */ public class LimitadorSoloLetrasNroMaxV2 extends PlainDocument{ private JTextField miJTextField; private int nroMaxCaracteres; public LimitadorSoloLetrasNroMaxV2(JTextField mijtext, int nroMaxCaract){ miJTextField=mijtext; nroMaxCaracteres=nroMaxCaract; } public void insertString(int arg0, String arg1, AttributeSet arg2) throws BadLocationException{ for (int i=0;i<arg1.length();i++){ if ((miJTextField.getText().length()+arg1.length())>nroMaxCaracteres){ miJTextField.transferFocus(); return; }else if (!Character.isLetter(arg1.charAt(i)) && !Character.isSpaceChar(arg1.charAt(i))) return; } super.insertString(arg0, arg1, arg2); } } Modo de uso: supongamos que tenemos un JTextField llamado txtApellidos, entonces lo que tenemos que hacer es:

txtApellidos.setDocument(new LimitadorSoloLetrasNroMaxV2(txtApellidos,30)); 1.

Muy bueno Dice:


8/10/08 a las 6:05 pm

Si los conociera dejara un comentario en este mismisimo lugar Muy buena la pgina, sigan agregando cosas asi crece. 2.

Henry Dice:
21/10/08 a las 9:11 am

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 5 of 14

me sirvio bastante los codigos muchas gracias por cierto encontre un pequenio error en el codigo de : LimitadorSoloLetrasNroMax su codigo constructor esta cn el nombre de LimitadorSoloLetras deberia ser : LimitadorSoloLetrasNroMax solo eso ! ^^! y gracias nuevament x el code ^^! 3.

hernan Dice:
26/10/08 a las 7:54 pm

Tens razn Henry, ya lo correg. Gracias por comentar. 4.

Porfirio Dice:
18/11/08 a las 2:18 am

xD a la. se la rifaron. soy un programador en java con algo de experiencia pero hasta ahorita no habia tenido la necesidad de limitar directamente las entradas de lso usuairos, y realemnte andaba pariendo cuates porque no veia por donde epro realemnte su pagina me ayudo una enormidad a superar ese problema Gracias! 5.

edgar Dice:
19/11/08 a las 5:10 am

me ha alivianado bastante tu codigo. agregar tu pgina a mis favoritos. gracias. 6.

edgar Dice:
19/11/08 a las 5:59 am

estas clases me han ahorrado mucho tiempo en un proyecto de java+oracle que ando realizando, pues han resuelto mucha de la parte dificil de la validacin antes de meterlo a la base de datos para no dejar para no permitir al usuario meter basura. otra vez gracias. 7.

hernan Dice:
19/11/08 a las 11:28 pm

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 6 of 14

Me alegro que les haya servido. Gracias Porfirio y Edgar por comentar. Saludos. 8.

harold velosa Dice:


24/2/09 a las 6:01 pm

hola genial tu codigo justo lo que buscaba gracias por tu aporte 9.

trancelex Dice:
9/3/09 a las 6:50 pm

muy buen ejemplo, pero me podrias decir como hacer para que llegue al maximo del limite, me mande a otro campo de texto el cursor. 10.

hernan Dice:
12/3/09 a las 2:28 am

harold velosa: me alegro que te haya servido. Saludos trancelex: para poder hacer lo que tu quieres debes agregar una nueva condicion que evale: que si se llego al lmite entonces cambie el foco al prximo campo. Para que lo puedas ver ms claro he agregado un cuarto ejemplo. Espero que te sirva. Saludos y disculpa la demora. 11.

Daniel Dice:
17/3/09 a las 5:45 am

Muuuuuuy buenoooooooo excelente trabajo!!!! me ahorraste mucho trabajo gracias!!! 12.

hernan Dice:
17/3/09 a las 7:25 pm

Hola Daniel, es bueno saber que te fue til. Gracias por comentar. Saludos. 13.

Minnie Dice:
24/3/09 a las 6:36 pm

Hola Alguien puede ayudarme con el siguiente problema? tengo una base de datos en oracle, los registros de las tablas contienen datos entre ellos caracteres como signos de mas, asteriscos, ampersan, signo de numero, etc. El detalle est en que cuando leo un registro y quiero obtener informacion de ste por medio de un substring, la cadena se trunca en la posicion donde encontro el simbolos especial, alguien me puede indicar como puedo evitar que se trunque? gracias por el apoyo. Saludos. 14.

Minnie Dice:

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 7 of 14

24/3/09 a las 6:37 pm

me falto comentar que estoy trabajando con java. 15.

Minne Dice:
28/3/09 a las 12:40 am

Hola He encontrado la solucin al problema planteado por mi misma. Resulta que al realizar una consulta a una tabla de oracle, dejaba el resultado en un objeto de tipo String, el cual enviaba como parmetro en una url para dirigirme a otro jsp; como el objeto String contenia caracteres especiales tales como el &, ?, etc. Y como el separador de parametros de la url son justamente el signo ? y el & era lo que estaba generando el conflicto. Hernn misin cumplida jaja. Saludos. 16.

hernan Dice:
28/3/09 a las 1:06 am

Hola Minnie, me alegro que hayas podido resolver tu problema. Gracias por comentar la solucin, ya que es una buena forma de ayudar a otros que se encuentren con la misma dificultad. Saludos. 17.

Melina Dice:
31/3/09 a las 4:19 pm

qu tal? estoy trabajando con java y Alguien sabe cmo validar una cadena contra un lay-out? ejemplo: [A-Z,]{3,4}[0-9]{2}[0-3]{2}[0-9]{2} es decir, que revise que solo haya 3 o 4 caracteres de la A a la Z, 2 numeros del 0 al 9; 2 numeros del 0 al 3 y dos numeros del 0 al 9. Me urge, por favor alguien que me ayude. 18.

hernan Dice:
1/4/09 a las 12:37 pm

Hola Melina, lo primero que debes hacer es poner la librera Pattern(que sirve para comprobar patrones) dentro de tu archivo java, para ello escribes lo siguiente: import java.util.regex.Pattern; y luego mediante una condicin compruebas la validez de tu patrn con la expresin que quieras: String strExpresion=ABC890145; if(Pattern.matches([A-Z,]{3,4}\\d{2}[0-3]{2}\\d{2}, strExpresion)) System.out.println(Expresin Vlida);

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 8 of 14

else System.out.println(Expresin Invlida); Espero que te haya sido til. Saludos. 19.

Melina Dice:
1/4/09 a las 3:01 pm

Qu tal Hernn? gracias por la informacin, lo integrar a mi aplicacin. Otra vez Graaciiaaaas!!!!!!!!!!!!! 20.

hernan Dice:
2/4/09 a las 12:40 am

Hola Melina, que bueno que te haya servido!. Gracias a ti por comentar. Saludos. 21.

Maximalito Dice:
28/7/09 a las 7:57 pm

Saludos \"hernan\" Gracias, por estos ejemplos que me han ayudado mucho, estaba buscando algo mo esto, Super Genial los ejemplos, saludos y grax!!! 22.

Marios Dice:
29/7/09 a las 5:18 am

MUY BUENOS EJEMPLOS, TUS CODIGOS ME SALVARON LA VIDA MUCHAS GRACIAS 23.

hernan Dice:
30/7/09 a las 6:15 pm

Maximalito: gracias por comentar, me alegro que te hayan servido los ejemplos. Saludos. Marios: de nada! gracias por comentar. Saludos. 24.

ol Dice:
18/8/09 a las 10:01 pm

Hola tu codigo me ayudo bastante, pero como podria hacer para que ademas de letras y espacios me acepte el punto. Y como haria para validar un textfield con doubles. 25.

jonatan Dice:
17/9/09 a las 12:41 am

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 9 of 14

buuuu, maana es mi final de java de primer ciclo y no estudie naaa, buuuu 26.

Sergio Dice:
12/11/09 a las 9:32 pm

Hernan, estoy trabajando en NetBeans 6.7.1 y tengo un JTextField generado automticamente por uno de los asistentes (el de master/detail). Primero que al crear la clase LimitadorSoloLetras me arroja un error en la ltima lnea sobre arg2. Me dice Cannot find symbol sugiere que convierta a (javax.swing.text.AttributeSet) arg2. Haciendo esto, se va el error. Pero luego, cuando quiero implementar la case, coloco nombreField.setDocument(new LimitadorSoloLetras()); debajo de nombreField = new javax.swing.JTextField(); pero no pasa nada no me valida el contenido del textfield. Alguna sugerencia? 27.

hernan Dice:
13/11/09 a las 2:08 pm

Hola Sergio, recin lo estuve probando al cdigo en el Netbeans 6.7.1 y funciona correctamente. Fijate de haber importado todas las libreras que necesitas y haber extendido tu clase Limitadora de PlainDocument. Si segus con problemas avsame y voy a ver de subir el proyecto en Netbeans. Saludos. 28.

Sergio Dice:
13/11/09 a las 2:25 pm

Disculpame la molestia Hernan, pero sabes que pruebo y no me funciona, si bien no me da ningun error ahora, no me limita los caracteres. Estas rutinas, te validan el texto despues que lo escribiste y saliste del textfield o mientras lo estas escribiendo (como un JFormattedTextField con mscara) ? Te animas a mandarme tu proyecto? Muchas gracias Y otro pedido, podes poner un posto sobre como relacionar un combobox con un determinado campo de una tabla usando NetBeans Gracias nuevamente. 29.

hernan Dice:
13/11/09 a las 4:27 pm

Hola Sergio, ah te paso un ejemplo de como usar el LimitadorSoloLetras: http://www.mediafire.com/file/zmykynin2mz/EjemploLimitador.rar Espero que te sirva y puedas solucionar tu problema, y no es ninguna molestia . Por cierto respecto a tu pedido, te refieres a cargar datos de un campo de una base de datos en un combobox?

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 10 of 14

Saludos!. 30.

Sergio Dice:
13/11/09 a las 4:30 pm

Yo estoy creando formularios usando la plantilla master/detail de NetBeans y en determinados forms tengo datos que son por ejemplo, nombres de localidades que tienen que cargarse desde una tabla de la base de datos entonces no me queda claro como hacer para que el combobox me muestre los nombres de las localidades pero me devuelva un valor nmerico correspondiente al ID de la localidad porque eso es lo que quiero guardar en mi tabla. Nuevamente, muchas gracias y voy a probar lo que me colgaste 31.

jose Dice:
15/11/09 a las 9:10 pm

EXELENTE APORTE ME FUNCIONA PARA NETBEANS ,MUCHISIMAS GRACIAS 32.

hernan Dice:
17/11/09 a las 1:17 am

De nada Jose! y gracias a vos por comentar Saludos! 33.

jose Dice:
18/11/09 a las 9:13 am

TENIA UNA DUDA PERO YA LA RESOLVI: necesitaba validar una cadena de numeros pero decimales y tenia problemas con el metodo LimitadorSoloNumeros pero ahora ya la resolvi ,lo que hice fue Aqui te van aparecer todos lo eventos que se le pueden agregar a un jtexfield en Eventos->key->key Released private void preKeyReleased(java.awt.event.Key evt) { if(!pre . getText() . matches([0-9]+[.]?[0-9]*) ) { pre.setText("); } } ESTA PAGINA ME FUE DE GRAN AYUDA GRACIAS, AQUI LES DEJO ESTO POR SI LO LLEGASEN A NECESITAR 34.

Helard Dice:
19/11/09 a las 2:20 am

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 11 of 14

Hola, yo tengo un problemilla trabajo con Frame, pero cuando pongo el setDocument() no me lo reconoce, que es lo q pasa? ayudame por favor public New_Trab() { initComponents(); txtcod.requestFocus(); setSize(750, 700); txtcod.setDocument(new ValidarNumero()); } me aparece como metodo no reconocido que puedo hacer? 35.

Juan Dice:
26/11/09 a las 2:53 am

Hola, muchisimas gracias por estos codigos, ya hace tiempo andaba buscando algo para limitar a jtextfield y que solo el usuario ingresara letras o numeros, tu codigo me ha servido bastante, te fecilito y de antemano un agradecimiento total 36.

Natalia Elizabeth Dice:


25/1/10 a las 7:19 pm

Hola Her, me re re sirvi lo de los limitadores!! Muchas gracias!!!! Aprovecho q veo q sabs del tema y te cuento: Estoy haciendo una aplicacin de escritorio y quera saber si poda usar ejb (que todos los ejemplos que he visto son para aplicaciones web) o si tengo que usar otra cosa (como Spring) para que los clientes (aplicacin de escritorio) accedan al programa del servidor (que tambin es una aplicacin de escritorio) Muchas gracias otra vez !!!! 37.

Hector Serrano Dice:


14/3/10 a las 10:57 pm

Hola Hernan, Thanks a lot. 38.

isabel Dice:
17/3/10 a las 2:41 pm

Hola Buenos dias He intentado resolver un ejercicio y por mas que he intentado no he logrado tener la solucion y necesito pressentarlo como tarea ya estoy baastante desesperada y por eso pido su ayuda, le adjunto el ejercicio 1. Escriba una aplicacin java que muestre los siguientes patrones uno debajo de otro. Use ciclos for para generar los patrones, cada asterisco debe imprimirse con una instruccin System.out.print(*). Puede utilizar una instruccin System.out.println(), para posicionarse en la lnea siguiente y puede utilizarse una instruccin como System.out.print( ), para mostrar un espacio en blanco para los ltimos patrones.

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 12 of 14

* ********** ********** * ** ********* ********* ** *** ******** ******** *** **** ******* ******* **** ***** ****** ****** ***** ****** ***** ***** ****** ******* **** **** ******* ******** *** *** ******** ********* ** ** ********* ********** * * ********** Muchas gracias por la ayuda 39.

hernan Dice:
18/3/10 a las 12:16 am

Natalia: la verdad nunca us ejb o spring, asi que no te podra decir. Saludos! Hector: de nada!. Gracias por comentar! Isabel: la idea que se me ocurre en este momento sera la siguiente: anidar 2 fors y luego utilizar condicionales para decidir si imprimo un asterisco o un espacio, pero no se si te dejan usar condicionales. De cualquier modo te dejo mi solucin y me avisas si te sirvi. Saludos! int n=10; int m=25; for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ if((j==i+1)||(j==m-i-2)||(j==m/2)) System.out.print(" "); else System.out.print("*"); }

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 13 of 14

System.out.println(); }

40.

Diego Dice:
20/3/10 a las 1:11 pm

Buenas, muchas gracias por el aporte, siempre hay algo constructivo que aprender, pero la verdad tengo una duda puesto que siempre que trato de ejecutar el programa, usando el jcreator, me pide que seleccione un mtodo :\The system couldnt find a suitable main method, Do you want to select a main method or continue?\ al dar continuar, el programa se ejecuta, pero sale Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file) where options include: -client to select the \client\ VM -server to select the \server\ VM -hotspot is a synonym for the \client\ VM [deprecated] The default VM is client. -cp 41.

Diego Dice:
20/3/10 a las 1:15 pm

Por otro lado, tratando de no usar el throws, escrbio el siguiente cdigo, y tambien presenta problemas por el metodo main. import javax.swing.text.AttributeSet; import javax.swing.text.BadLocationException; import javax.swing.text.PlainDocument; public class limitesletras extends PlainDocument{ public void insertString(int arg0, String arg1, AttributeSet arg2) { try { for (int i=0;i<arg1.length();i++) if (!Character.isLetter(arg1.charAt(i)) && !Character.isSpaceChar(arg1.charAt(i))) {return; super.insertString(arg0, arg1, arg2); }

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Divide & Conquer Blog Archive Limitar caracteres en un JTextfield

Page 14 of 14

catch(BadLocationException e) { System.out.println("ADVERTENCIA SOLO SE PERMITEN LETRAS Y ESPACIOS "); System.out.println(" \n " + e.toString());} } } No llevo mucho tiempo trabajando en java, asi que espero entienda mi inocencia, le agradezco cualquier aporte. 42.

Carlos Botello Dice:


12/4/10 a las 6:46 pm

estimado ese fue un gran aporte de verdad q esta bien chevere y esta perfecto muchas gracias 43.

Jor-G Dice:
15/4/10 a las 2:21 pm

que buenos ejempos.la verdad me sirvieron de muchogracias por tomarte la molestia y el tiempo para subir estos ejemplos 44.

alex Dice:
30/5/10 a las 1:00 am

Gracias men me atudo mucho tus codigos no se como agradecerte 45.

hernan Dice:
30/5/10 a las 9:28 pm

Gracias Carlos, Jor-G y alex por comentar el post.. es bueno saber que les sirvi. Saludos!

http://divideandconquer.com.ar/dyq/2008/10/limitar-caracteres-en-un-jtextfield/

09/06/2010

Вам также может понравиться