Limitar quantidade de caracteres em JTextPanel

3 respostas
thiago_spdvr

Bom dia pessoal !!

Estou com um problema:
Gostaria de saber como posso bloquear a digitação de caracteres em JTextPanel depois que atungisse a quantidade de caracteres que eu especificar.
Valeu…

3 Respostas

javer

Você precisa criar uma classe extendendo o PlainDocument e colocar essa classe como o textPane.setDocument( new SuaClasse() ), nessa classe você define as regras e define também um parâmetro passando o tamanho aceito.

E é [color=darkblue]JTextPane[/color], não é [color=red]JTextPanel[/color] :slight_smile:

thiago_spdvr

Valeu pela dica. Vc tem algum material que eu pudesse dar uma olhada pra implementar os principais metodos de PlainDocument ?

Obrigado.

javer
Segue um exemplo bem básico, procure mais na web que vai encontrar bastante material:
import javax.swing.text.AbstractDocument.AbstractElement;
import javax.swing.text.AbstractDocument.DefaultDocumentEvent;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.Element;
import javax.swing.text.PlainDocument;

public class DocumentoTexto extends PlainDocument {

    int tamanho = 256;

    public DocumentoTexto(int tamanho) {
        this.tamanho = tamanho;
    }

    @Override
    protected AbstractElement createDefaultRoot() {
        return super.createDefaultRoot();
    }

    @Override
    public Element getDefaultRootElement() {
        return super.getDefaultRootElement();
    }

    @Override
    public Element getParagraphElement(int pos) {
        return super.getParagraphElement(pos);
    }

    @Override
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
        // aqui limita o tamanho do campo
        str = str.substring(0, (tamanho - getLength()));
        super.insertString(offs, str, a);
    }

    @Override
    protected void insertUpdate(DefaultDocumentEvent chng, AttributeSet attr) {
        super.insertUpdate(chng, attr);
    }

    @Override
    protected void removeUpdate(DefaultDocumentEvent chng) {
        super.removeUpdate(chng);
    }
}
Criado 6 de outubro de 2009
Ultima resposta 6 de out. de 2009
Respostas 3
Participantes 2