Limitar los caracteres en un JTextField

Este es un ejemplo muy basico, donde se limita la entrada de cararteres en un JTextField, pues es una forma muy util cuando se necesita.

Para que quede claro, la clase JTextFieldLimit es una clase de tipo Document que sobreescribirá insertString(…) que controlará la condicion de la cantidad de caracteres como límite. Esta clase es llamada donde se instancia el JTextField, es decir donde se declara dicho componente, veamos:


/**
*
* @author manix
*/
import javax.swing.text.*;

public class JTextFieldLimit extends PlainDocument {
private int limit;
// optional uppercase conversion
private boolean toUppercase = false;

JTextFieldLimit(int limit) {
super();
this.limit = limit;
}

JTextFieldLimit(int limit, boolean upper) {
super();
this.limit = limit;
toUppercase = upper;
}

@Override
public void insertString
(int offset, String  str, AttributeSet attr)
throws BadLocationException {
if (str == null) return;

if ((getLength() + str.length()) <= limit) {
if (toUppercase) str = str.toUpperCase();
super.insertString(offset, str, attr);
}
}
}

El constructor  recibe un int, que indica el limite de caracteres que se permitirá ingresar en el JTextField

 JTextFieldLimit(int limit) 

Ahora veamos como se usa esta clase con aplicandolo a nuestro JTextField:

JTextField textfield = new JTextField();
textField.setDocument(new JTextFieldLimit(15));

Noten como se hace una instancia de la clase JTextFieldLimit antes mencionada recibiendo el numero 15 como limitador de cararteres. Acá podrán ver el ejemplo completo, y abajo los encontraran el código empleando.

Ventana.java JTextFieldLimit.java

3 comments

  1. yo encontre una forma más facil bueno lo hice en un JPasswordField pero al fin y al cabo es lo mismo
    ahi va el codigo

    private void contra1KeyTyped(java.awt.event.KeyEvent evt) {
    int i = contra1.getText().length();
    if(contra1.getText().trim().length()<10){
    usser.setText(String.valueOf(i));
    }else{
    i=10;
    String com=contra1.getText().substring(0, 9);
    contra1.setText("");
    contra1.setText(com);
    }
    }

    /*en mi caso queria una contraseña que no superara los 10 caracteres

    espero que les sirva Adios */

  2. Que gran aporte gracias justo lo que necesitaba!!!

  3. Javero JR

    Un excelente aporte! ambos códigos funcionan a la perfección, me han sacado de un gran apuro. Gracias por compartirlo

Leave a Reply