JFormattedTextField com data

A ideia é a seguinte:
Um campo para data que começa limpo e comforme os números são adicionados aprecem as barras.
<-limpo->
0
02/
02/12/
02/12/1999
Eu pensei numa gambiarra, mas não é o que quero.
Alguém tem uma ideia?

Cara… já vi muita coisa, tipo tem que usar um metodo, mas ainda estou com duvidas…se vc conseguir me avisa aí MP

Bem amigos, pra fazer o que vcs querem, vcs tem que criar o seu próprio Document.

Primeiro vc deve usar um JFormattedTextField pro campo de data, suponhamos que seu nome seja ftfData

Depois vc “setta” o document desse campo, assim: ftfData.setDocument(new MeuDocumentData());

Onde MeuDocumentData é o nome da classe que vc terá que construir. Vc deve fazê-la assim:

[code]public class MeuDocumentData extends PlainDocument {

}[/code]

Ai, dentro dessa classe vc tem que fazer todo o tratamento, por ex, se digitar uma letra, vc apaga (pq letra não deve fazer parte da data). Se digitar dois números, vc acrescenta a / (que seria o preenchimento do dia), se digitar mais dois números vc coloca outra / (que seria o preenchimento do mês)… enfim, “o caminho das pedras” é esse…

Pesquisa sobre isso ai que vc consegue! :wink:

Boa sorte!

Valeu Renata!

Acho show mulher participando deste tipo de fórum, não que eu discrimine vcs, é na minha sala só é macho!! =D

Mas valeu Renata!!!..ah quando eu precisar de ajuda…posso consultar vc?!

Hahahhaa… pode sim, sou daquelas que não tem muito tempo nem pra respirar. Mas me esforço pra ajudar pq tb gosto de receber ajuda qdo preciso.

Então, não liga não, qdo eu estudava, na minha sala tb tinham aulas que eu era a única! rs…

T+,
Boa sorte!

public class Formata extends PlainDocument {
    JTextField campoTexto;
    int cont = 0; // conta quantos numeros foram digitados 
    
    /* Controla a entrada de dados no campo texto */
    public Formata(JTextField jft) {
        super();
        campoTexto = jft;
    }



    @Override
    public void insertString(int offset, String str, AttributeSet attr)
            throws BadLocationException {
        /* !Character.isDigit(str.charAt(str.length() - 1
           significa se o caractere digitado nao for numero
         str == null nao é String */
        if (str == null || !Character.isDigit(str.charAt(str.length() - 1))) {
            return;
        }    
        cont++;
        if(cont&lt;3){ // menos de  numeros
            super.insertString(offset, str, attr);// apenas escreve
        }else if(cont==3 || cont==5){
            super.insertString(offset, &quot;/&quot;+str, attr); // escreve com a '/' anteposta
        }else if(cont&lt;9){
            super.insertString(offset, str, attr); // apos a 2ª '/' mais  caracteres
        }
    }
    /* falta validar a data. Um detalhe */
}

tava faltando um toque feminino. Não é Renata?

Toque feminino? Essa é boa!

Mas e ai? Vc testou? Esta funcionando? Desculpe eu não testar, estou super enrolada por aqui… só olhando, aparentemente está ok. Claro, falta vc validar a data…rs…

Só um detalhe…

É preciso tratar umas coisinhas… por exemplo: se você colar valores… se você selecionar caracteres e trocar por outro…

Tendi, tá quase perfeito então.

A idéia vc pegou, agora só fazer os ajustes. :wink: