Ejemplos java y C/linux

Tutoriales

Enlaces

Licencia

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.
Para reconocer la autoría debes poner el enlace https://old.chuidiang.org

Limitar los caracteres de un JTextField

Para limitar los caracteres en un JTextField (por ejemplo, para que solo admita números o para que admita un número máximo de caracteres), hay muchas soluciones.

Una de ellas, que es la que vamos a ver aquí, consiste en crear un Document y añadírselo al JTextField. Si no queremos complicarnos mucho la vida, lo mejor es heredar de javax.swing.text.PlainDocument, que ya tiene todos los métodos necesarios hechos, y redefinir sólo el que nos interesa.

El método en cuestión es

public void insertString(int arg0, String arg1, AttributeSet arg2) throws BadLocationException

A este método le llamará el JTextField cada vez que queramos insertar en él algún caracter.

La redefinición de nuestro método debe comprobar que podemos añadir los caracteres y si es asi, llamar al mismo método de la clase padre, que se encargará de insertarlos. Si no queremos que se inserten, basta con hacer un return sin llamar a la clase padre.

Por ejemplo, si queremos que nuestro editor sólo admita cifras (números), debemos comprobar que todos los caracteres de arg1 son cifras. Si esto es asi, llamaremos al método de la clase padre.

if (sonCifras(arg1))
    super.insertString(arg0, arg1, arg2);

Si queremos comprobar que el total de caracteres no supere un máximo, debemos sumar estos que se quieren insertar con los que ya hay en el editor y comprobar que la suma no excede un máximo

if ( (numeroCaracteresEditor + arg1.length()) > numeroMaximoCaracteres)
   return;
super.insertString(arg0, arg1, arg2);

Para este último caso, nuestra clase Document tiene que tener en algún sitio el número de caracteres que ya tiene el editor. Una opción es que tenga guardado el editor y le pida cuantos caracteres tiene en cada caso.

Aquí tienes una implementación concreta de un Document para este último caso

class LimitadorCaracteres extends PlainDocument
{
    /**
     * El editor del que estamos limitando caracteres.
     */

    private JTextField editor;
    
    /**
     * Número máximo de caracteres que deseamos en el editor.
     */

    private int numeroMaximoCaracteres;

    /**
     * Crea una instancia de LimitadorCaracteres.
     * 
     * @param editor Editor en el que se quieren limitar los caracteres.
     * @param numeroMaximoCaracteres Número máximo de caracteres que queremos
     * en el editor.
     */

    public LimitadorCaracteres(JTextField editor, int numeroMaximoCaracteres)
    {
        this.editor=editor;
        this.numeroMaximoCaracteres=numeroMaximoCaracteres;
    }
    
    /**
     * Método al que llama el editor cada vez que se intenta insertar caracteres.
     * El método comprueba que no se sobrepasa el límite. Si es así, llama al
     * método de la clase padre para que se inserten los caracteres. Si se 
     * sobrepasa el límite, retorna sin hacer nada.
     */

    public void insertString(int arg0, String arg1, AttributeSet arg2) throws BadLocationException
    {
        if ((editor.getText().length()+arg1.length())>this.numeroMaximoCaracteres)
            return;
        super.insertString(arg0, arg1, arg2);
    }
    
}

Para usar esto, simplemente hay que instanciarlo y meterlo en el JTextField como un Document

JTextField editor1 = new JTextField();
// Se pone el limitador en el editor a 10 caracteres.
editor1.setDocument(new LimitadorCaracteres(editor1,10));

Con esto es suficiente de momento.

Estadísticas y comentarios

Numero de visitas desde el 4 Feb 2007:

Aviso Legal