Valor maximo de um edit

1 resposta
J

Boa noite…

Em que propriedade estipular o valor maximo de digitos de um edit? eu tava fuçando, mas nao encontrei.

1 Resposta

R

Até onde sei, infelizmente essa propriedade não existe. Uma solução é usar JTextField.setDocument() passando um Document especializado para limitar o número máximo de caracteres. Segue abaixo o Document que uso em minhas aplicações:

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

// PlainDocument com limitação ao número máximo de caracteres armazenados.
// Valores de limite menores ou iguais a zero indicam que não haverá
// limitações ao número de caracteres.

public class FixedSizePlainDocument extends PlainDocument {
  private int maximumSize = 0;

  public FixedSizePlainDocument(int maximumSize) {
    this.maximumSize = maximumSize;
  }

  public FixedSizePlainDocument() {
    this(0);
  }

  public int getMaximumSize() {
    return maximumSize;
  }

  public void setMaximumSize(int maximumSize) {
    this.maximumSize = maximumSize;
  }

  @Override
  public void insertString(int offset, String str, AttributeSet attr)
      throws BadLocationException {
    // Evita strings nulas ou vazias
    if ((str == null) ||
        (str.length() < 1)) {
      return;
    }

    // Só faz checagem de tamanho se o limite for maior do que zero
    if (maximumSize > 0) {
      // Se o texto atual já chegou ao limite, sai
      int curSize = this.getLength();

      if (curSize >= maximumSize) {
        return;
      }

      // Se a soma do comprimento atual do texto com o comprimento do
      // trecho a ser inserido superar o limite ajustado, trunca o
      // trecho a inserir para respeitar o limite
      int strSize = str.length();
      int sumSize = curSize + strSize;

      if (sumSize > maximumSize) {
        int lastPosition = Math.min(strSize, strSize - (sumSize - maximumSize));

        if (lastPosition >= 0) {
          str = str.substring(0, lastPosition);
        }
      }
    }

    // Insere a string
    super.insertString(offset, str, attr);
  }
}
Criado 23 de setembro de 2009
Ultima resposta 24 de set. de 2009
Respostas 1
Participantes 2