jueves, 8 de diciembre de 2011

How to: set MaxLength JTextfield // Setear longitud maxima de texto JTextField

Hola a todos :D espero estén pasando bien y preparándose para la celebración de la Navidad (si es que la celebran claro :D). no hay nada de malo en no celebrarla pero muchas veces hay regalos y comida... y lo mejor de todo... Its FREE!! x).
Bueno ya pasando al tema en cuestión. muchas veces (por no decir todas) queremos validar desde la interfaz del usuario la cantidad máxima de caracteres que un campo puede soportar. Cuando creamos una aplicación web la tarea es mas que sencilla, simplemente (si mi memoria no me falla) se hace asi:
Fácil verdad :D. pero en Java. por diferentes razones no existe un método para lograr dicho comportamiento en nuestros JTextField. entonces nosotros creamos una clase a la cual le indicamos la longitud deseada. esto de la siguente manera:




package tester;

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

/**
 *
 * @author McCubo
 * @website http://www.gnuteam.blogspot.com
 * @version 0.1
 */
public class TextLimiter extends PlainDocument {

    private Integer limit;

    public TextLimiter(Integer limit) {
        super();
        this.limit = limit;
    }
    /**
     * sobre escribimos este metodo de la clase PlainDocument
     * Si el limite es negativo o nulo no impone un limite al texto
     */
    @Override
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
        if (str == null) {
            return;
        }
        if (limit == null || limit < 1 || ((getLength() + str.length()) <= limit)) {
            super.insertString(offs, str, a);
        } else if ((getLength() + str.length()) > limit) {
            String insertsub = str.substring(0, (limit - getLength()));
            super.insertString(offs, insertsub, a);
        }
    }
}

Y para usarlo simplemente (después del initComponent, en caso de usar NetBeans IDE...como yo xD):

jTextField1.setDocument(new TextLimiter(10));

Como ven es simple de crear y fácil de implementar. Espero les sirva y espero comenten, esta vez no dejo archivo de descarga porque es simplemente una clase la que se debe crear.
Comenten y Nos vemos en otras entradas :D

1 comentario:

  1. Excelente!!!!!!!!!!!
    como no va a tener neatbeans una propiedad para esto !!
    de lujo t pasastes !! funciona

    ResponderEliminar