Limitar a N número de caracteres un JTextField Java


Con este post inicio una serie de entradas relacionadas con lenguajes de programación y a la vez culmino con los post de este año 2009.

Estoy trabajando en un proyecto y surgió la necesidad de limitar a cierto número de caracteres un JTextField en Java. Y di con esta solución.


private JTextField jTextFieldName =new JTextField();

private int limite  = 8;

jTextFieldName.addKeyListener(new KeyListener(){

public void keyTyped(KeyEvent e)

{if (jTextFieldName.getText().length()== limite)

     e.consume();
}

public void keyPressed(KeyEvent arg0) {
}

public void keyReleased(KeyEvent arg0) {
}
});

Con este código se limita a 8 los caracteres que se pueden escribir. Un poco la idea detrás de este código es que con cada carácter que se digite en JTextField se revisa mediante el evento keyTyped lo longitud de lo que se lleva escrito y si esto es igual límite, pues lo demás se ignora mediante el método consume.

Espero que les haya sido de utilidad.

About these ads

,

  1. #1 por Carlos el enero 25, 2010 - 9:58 am

    En .net uno se limita a setear la propiedad MaxLenght del control textbox a la cantidad de caracteres maxima deseada…

    tambien se pueden poner modificadores tales como UPPERCASE lowercase entre otros

    • #2 por kompuhint el enero 26, 2010 - 11:51 am

      Gracias Carlos, por el comentario. Siempre es bueno saber nuevas cosas.

  2. #3 por Ham el agosto 5, 2010 - 9:52 pm

    Hola, soy nuevo en JAVA, intente con tu ejemplo pero no me funcionó, es que soy nuevo XD y veo que ent u ejemplo creas el objeto JTextField mediante codigo, y si lo tengo creado ya, como la aplico??

    Admito que me sirvió tu explicación, esque ya tenia dibujado el JTextField, entonces para que me funcione lo usé así:

    //Permite hasta dos caracteres en el campo txtEdad
    private void txtEdadKeyTyped(java.awt.event.KeyEvent evt) {
    // TODO add your handling code here:
    if (txtEdad.getText().length()== 2){
    evt.consume();
    Toolkit.getDefaultToolkit().beep();
    //Como ves, implementé un beep para que suene si se trata de ingresar mas XD
    }
    }

    Si no es molestia, podrias postear como hacer para que un JIF se cierre pero sin ocultarlo, esque se queda en buffer si uso this.Setvisible(false); o dispose(); :(

    • #4 por kompuhint el agosto 21, 2010 - 8:51 pm

      Hola Ham,
      Supongo que estas usando Netbeans y que creas la Interfaz grafica usando Drag and Drop… Si ya tenés creado el JtextField, se aplica de la misma forma. Todo al final es código. En Netbeans tiene una boton que te permite ver el código fuente de la parte gráfica.(Búscalo debe estar en algún borde).

      Y agregas los siguiente, que son los métodos que capturan los eventos del teclado. Solo que donde este “jTextFieldName” colocas el nombre del JTextField que estaba creado.

      jTextFieldName.addKeyListener(new KeyListener(){

      public void keyTyped(KeyEvent e)

      {if (jTextFieldName.getText().length()== limite)

      e.consume();
      }

      public void keyPressed(KeyEvent arg0) {
      }

      public void keyReleased(KeyEvent arg0) {
      }
      });

      Ahora, con respecto a lo del “JIF”, que no se a que te referís, hablas algo de que queda en el buffer… me supongo que quieres liberar la memoria…
      Una de la maravillas de Java es que vos no tienes que preocuparte por estar reservando y liberando memoria. Java tiene una característica llamada Garbage Collector, que se encarga de liberar la memoria de los objetos que ya no se estén utilizando. Así que cero preocupación, Java ya lo hace por tí.
      Ahora si quieres especificarle a Java que liberar la memoria de un objeto, basta con igualar a null dicho objeto.
      Espero que te haya sido útil.

      • #5 por Bartolo Herrera el octubre 29, 2012 - 8:39 pm

        buenas noches!! voy leyendo este post y para responder a ham e imaginando que se trata de un JFrame o JInternalFrame la propiedad para sacarlo de memoria es dispose() coloca el nombre de tu ventana seguido de un punto y la propiedad que te mencione anteriormente, aunque es un metodo realmente, quedaria asi: NombreVentana.dispose();
        saludos!! (y)

  3. #6 por luigikhan el agosto 31, 2010 - 8:39 pm

    Tu código y tu manera de resolverlo y expliciarlo fue muy bueno. Vi demasiadas páginas con métodos complejos que no funcionaban. Y aunque ya lo había intentado con la misma propiedad, vi con tu ejemplo que habia cometido un pequeño pero importante error.

    De verdad gracias, me ahorraste mucho tiempo. Fue una solución directa, sencilla y eficaz.

  4. #7 por edwin el septiembre 9, 2010 - 3:36 pm

    y si kiero para otro JTextField, como hago q el e.consume se resetee a 0

  5. #8 por jl el noviembre 3, 2010 - 10:45 pm

    hola a todos, pues yo me encontraba en un problema y como necesitaba de que una caja de texto en java solo me aceptara cierta cantidad de numeros para poder escribir el isbn de un libro o numero de control en mi residencia y a continuacion les muestro el codigo correcto para meter solo cierta cantida de numeros y se puede adaptar facilmente a cualquier caja de texto

    try{
    long i=Long.parseLong(txtnumcont.getText());
    if (txtnumcont.getText().length()>14){

    int codigo=evt.getKeyCode();
    if(codigo==10){
    txtnombre.setEnabled(true);
    txtnombre.requestFocus();
    //habilita boton cancelar
    cmdcancelar.setEnabled(true);
    }
    } else{
    //JOptionPane.showMessageDialog(null, “Longitud incorrecta”, “Información”, 0);
    txtnombre.setEnabled(false);
    txtnumcont.requestFocus();
    // txtnumcont.setText(“”);
    cmdcancelar.setEnabled(false);
    }
    } catch(NumberFormatException e){
    // JOptionPane.showMessageDialog(null, “Caracteres no validos”, “Información”, 0);
    // txtnombre.setEnabled(false);
    txtnumcont.setText(“”);
    txtnumcont.requestFocus();
    //habilita boton cancelar
    cmdcancelar.setEnabled(false);

  6. #9 por jl el noviembre 3, 2010 - 10:46 pm

    es un rollaso tengo como tres meses y no he podido terminar todo el sistema

  7. #10 por Fabian el diciembre 1, 2010 - 7:54 pm

    FUERA MUJER ME CASARIA CONTIGO MEEEE AYUDASTEEEEE MUCHOOOOOOOOOOOOOO!!!!!

  8. #11 por yayo el marzo 25, 2011 - 9:03 am

    buen aporte sirvio de mucho

  9. #12 por Rodrigo el mayo 27, 2011 - 8:09 pm

    Te falto importar la libreria, tu codigo no me funcionaba le agregue la libreria y funciono ;)

    import java.awt.event.*;

    • #13 por kompuhint el agosto 5, 2011 - 9:40 am

      Gracias Rodrigo por la corrección.

  10. #14 por Federico el febrero 16, 2012 - 2:07 pm

    Gracias por coparte y compartir!!! funciona de 10, me ahorraste un buen rato de hacer intentos fallidos hasta dar en el clavo

  11. #15 por Delver Villanueva el junio 15, 2012 - 12:58 am

    Muy bueno Gracias. xD

  12. #16 por Jhon anaya el julio 16, 2012 - 12:25 am

    Y QUE PASA SI COPIO UNA CADENA MAS DE 8 CARACTERES DE OTRO LADO Y LO PEGO EN EL JTEXTFIELD??

    COMO PODER SOLUCIONAR ESE ERROR?

    • #17 por kompuhint el agosto 30, 2012 - 10:28 am

      La cadena se corta a ocho caracteres.

  13. #18 por Bruce el septiembre 24, 2012 - 11:27 am

    I think this is one of the most significant info for me.
    And i am glad reading your article. But wanna remark on few general
    things, The website style is wonderful, the articles is
    really nice : D. Good job, cheers

  14. #19 por Prisci el octubre 23, 2012 - 12:50 pm

    Como hago en netbean para que una caja de texto acepte solo numeros

  15. #20 por RALT el junio 2, 2013 - 7:20 pm

    Excelente Post solo tengo una duda no se si me pudieran ayudar quiero que a la hora de escribir cierto numeros en un jtextfield se pase automaticamente el foco a otro jtextfield

  16. #21 por hanna el noviembre 17, 2013 - 3:12 pm

    como puedo hacer que un jtextfield en java netbeans solo me acepte solamente los simbolos *, +,-,/???

  17. #22 por Chocho Oo OO el mayo 11, 2014 - 8:47 am

    Hola mis estimados una consulta tengo dos jtext uno para DNI que son 8 caracteres y otra RUC que son 11 y dos Radiobutton en java me estoy que doy vueltas en que si selecciono DNI que sea 8 caracteres maximo y que si selecciono el radioButton de RUC que sean 11 eso del keytipped solo funciona en el text pero no logro hacerlo validar en el radiobutton. Se los agradecere mucho su ayuda. Gracias de antemano

    • #23 por kompuhint el mayo 11, 2014 - 10:56 am

      Hola Chocho, por cada Jtext tienes que agregar una condición dentro de la función keytypped.
      Si adjuntas tu código te puedo ayudar mejor.
      Saludos

  1. Jtextfield | TagHall

Deja un comentario

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

Seguir

Recibe cada nueva publicación en tu buzón de correo electrónico.

%d personas les gusta esto: