Limitar qde de caracteres em um jTextArea

4 respostas
R

Salve, Salve Galera do GUJ!!

Sei que existem outros tópicos sobre o assunto e inclusive já li vários, mas continuo na mesma. Será que não tem um jeito mais simples de fazer isso, tal como [color=red]jTextField.setMaxLength(100)[/color] por exepmplo, já que se pode setar tantas propriedades não dá pra setar essa também? Nem utilizando uma IDE como o Netbeans? Tem que ser por meio da interface Document ou através de um Key Listner? E com relação a um contador de caracteres, tem como implementá-lo tal como no javascript ou no php. Muitas vezes esse contador ajuda o usuário do sistema a se policiar para não ultrapassa o limite de caracteres permitidos para um campo. Valeu Galera

4 Respostas

S

Bom dia,

Pesquisando por aqui achei uma classe que faz isso:

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

public class FixedLengthDocument extends PlainDocument {

    private int iMaxLength;

    public FixedLengthDocument(int maxlen) {
        super();
        iMaxLength = maxlen;
    }

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

        if (iMaxLength <= 0) // aceitara qualquer no. de caracteres
        {
            super.insertString(offset, str, attr);
            return;
        }

        int ilen = (getLength() + str.length());
        if (ilen <= iMaxLength) // se o comprimento final for menor...
        {
            super.insertString(offset, str, attr); // ...aceita str
        } else {
            if (getLength() == iMaxLength) {
                JOptionPane.showMessageDialog(null, "Limite de Caracteres atingido.");
                return; // nada a fazer

            }
            String newStr = str.substring(0, (iMaxLength - getLength()));

            super.insertString(offset, newStr, attr);
        }
    }
}

e para implementa-la:

jTextAreaObservacao.setDocument(new FixedLengthDocument(69));
Espero que sirva!
R

Value Sandro, Vou Testar essa Implementação e ver no que dá. Mas e com relação ao Contador de Caracteres em Tempo Real, Alguém tem alguma idéia ou ja fez algo pareceido?

R

E se eu quiser limitar a quantidade de caracteres por coluna e por linha, por exemplo: 51 colunas x 5 linhas = Total de 255 caracteres? Tem como fazer esse tipo de implementação?

R

Fala aí Galera do GUJ,

Ninguem tem nehuma solução para as minhas últimas 2 perguntas? Existe alguma forma de contar os caracteres digitados a medida que o usurário vai digitando (Tipo JavaScript)? E com relação a quebra automática de linha dentro de um jTextArea, como implementar isso? Via Document? O que pretendo fazer é limitar o jTextArea a 255 Caracteres (51 caracterers por Linha x 5 Linhas) e quando atingir o limite da linha o cursor mudar de linha, ou quando atingir o limite de caracteres totais o cursor travar e mostrar a mensagem “Limite de Caracteres Atingido”, mas ainda permitindo a edição do jTextArea para reduzir o texto digitado. Mas também seria interessante bloquear a função colar dentro desse jTextArea ou ignorar os Caracteres excedentes qdo houver “cola” externa para dentro do jTextArea. Isso é Possível? Como Implementar isso? Mais uma vez Agradeço a essa Galera “Show de Bola” sempre disposta a compartilhar seus conhecimentos. Um Forte Abraço a Todos!

Criado 11 de setembro de 2012
Ultima resposta 18 de set. de 2012
Respostas 4
Participantes 2