Gostaria de ajuda para solução com um problema relacionado a um campo para digitação de CPF. Vou tentar ser o mais claro possível na explicação.
O que eu preciso seria semelhante a uma máscara, mas gostaria que os símbolos utilizados fossem aparecendo à medida que vou digitando o CPF, parecido com aquele para campo monetário, que não precisa ficar digitando a vírgula. Consegui iniciar, mas estou com dificuldades para dar continuidade.
Abaixo segue um código que comecei a ter algum resultado.
> package outros;
> import javax.swing.text.*;
> public class DocumentCPF extends PlainDocument {
> public void insertString(int off, String str, AttributeSet a) throws BadLocationException {
> if (str.length() == 1) {
> if (off < 14) {
> if (off == 3 || off == 7) {
> str = "." + str;
> }
> if (off == 11) {
> str = "-" + str;
> }
> super.insertString(off, str, a);
> }
> } else {
> String cpf = this.getText(0, this.getLength());
> cpf = cpf.replace(".", "").replace("-", "");
>
> StringBuilder strB = new StringBuilder(str);
> if (str.length() > 9) {
> strB.insert(3, ".").insert(7, ".").insert(11, "-");
> } else if (str.length() > 6) {
> strB.insert(3, ".").insert(7, ".");
> } else if (str.length() > 3) {
> strB.insert(3, ".");
> }
> super.insertString(off, strB.toString(), a);
> }
> }
> }
Com este código, quando digito, já tem o efeito que preciso, mas não estou conseguindo implementar quando apago o conteúdo com delete ou backspace para atualizar a formatação enquanto estou fazendo a alteração.
Não quero usar máscara pois fica um pouco “deselegante”, pois ela mostra os símbolos antes mesmo de digitar qualquer coisa. Eu quero incluir o símbolo à medida que forem necessário.