Problema com JFormattedTextField()

Fala pessoal… gostaria de tirar uma duvida…

Estou trabalhando com JFormattedTextField e encontrei alguns probleminhas bobos porem percistentes rsrsrsrs:::::::

Quando eu configuro no JFormatted a minha mascara (##/##/##), quando vou no formulario, preencho esse campo tudo certo respeita é só deixa atribuir numero… só que quando eu saio do campo, tiro o foco dele e o mesmo nao estiver todo preenchido ele restaura a ultima informação completa que ele teve!

Vou explicar melhor: se eu tiver preenchido no meu campo a data “23/08/1”, como voces podem ver… esta faltando o “0” do ano! ao inves dele gravar essa informação… ele simplesmente zera tudo! por que? tem como eu tratar isso pra que ele aceite informações em falta?

Boa noite amigo…

Esse rosto me é conhecido de outros momentos, de outras linguagens… kk :lol:

Enfim, posta o seu código pra gente dar uma olhada, ficou um pouquinho confuso.

Abraço! :stuck_out_tongue:

Olá!

Normalmente não gosto de usar o JFormatedTextField… gosto de usar a classe Document pra controlar o que é digitado no textField.

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

/**
 *
 * @author Eliangela
 * @author Gicelly
 */
public class DocumentoData  extends PlainDocument {
    private static final int MAX_LENGTH = 10;

    @Override
    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
        if (str == null) {
            return;
        }
        if (!Character.isDigit(str.charAt(0))) {
            return;
        }

        String texto = getText(0, getLength());
        int tamanhoTexto = texto.length() + str.length();

        if (tamanhoTexto < MAX_LENGTH) { //  22/10/2010
            remove(0, getLength());
            StringBuffer strBuf = new StringBuffer(texto.replace("/", "") + str);
            if (tamanhoTexto >= 5){
                strBuf.insert(4, "/");
                strBuf.insert(2, "/");
            } else if (tamanhoTexto >= 2){
                strBuf.insert(2, "/");
            }

            super.insertString(0, strBuf.toString(), a);
        } else {
            super.insertString(offs, str.substring(0, (MAX_LENGTH - getLength())), a);
        }
    }

}

Use assim:

JTextField seuText = new JTextField();
setText.setDocument(new DocumentoData());

Dentro do método insertString, vc pode colocar algumas condições, por ex, quando uma pessoa não digita a Data toda, vc pode completar com zero, etc… é bem mais fácil trabalhar assim.
Tutorial GUJ sobre a classe PlainDocument: http://www.guj.com.br/article.show.logic?id=29

espero ter ajudado.
Abraços