E dá-lhe MaskFormatter e JFormattedTextField!

8 respostas
C

Pessoal, estou com o seguinte problema:

Criei um MaskFormatter("##/##/####") e defini-lo como mascará de meu campo JFormattedTextField.

Ele valida minhas datas corretamente, reconhece “datas” invalidas (como 20/20/2004) no entanto gostaria q se o usuário optasse por ñ preencher o campo data, após inserir uma data válida (10/10/2004), ele pudesse apagá-la (com delete ou backspace) assim o campo ficaria em “branco” (//____). No entanto, depois q apago a data e dou “tab” no campo sempre fica a última data válida inserida nele.

Como faço pra alterar/impedir isso???

8 Respostas

marcioa1

Charles,

Também já tive dificuldades com este objeto, mas acho que posso ajudar.

Ele tem duas propriedades que são o text ( o que está digitado ) e o value ( é o valor do objeto , que nem sempre equivale ao valor digitado ).

experimente, ao invéz de tab, digitar Enter. Creio que funcionará. O certo mesmo é você disparar um commit. Observe o texto abaixo extraido da API

JFormattedTextField allows configuring what action should be taken when focus is lost. The possible configurations are:

Value

Description
JFormattedTextField.REVERT Revert the display to match that of getValue, possibly losing the current edit.

JFormattedTextField.COMMIT Commits the current value. If the value being edited isn’t considered a legal value by the AbstractFormatter that is, a ParseException is thrown, then the value will not change, and then edited value will persist.

JFormattedTextField.COMMIT_OR_REVERT Similar to COMMIT, but if the value isn’t legal, behave like REVERT.

JFormattedTextField.PERSIST Do nothing, don’t obtain a new AbstractFormatter, and don’t update the value.

Espero ter ajudado

Márcio

C

Valeu Márcio.

Sua dica (JFormattedTextField.PERSIST) resolveu parte do meu problema!

Tive tb q sobrecrever o “stringToValue” da classes MaskFormatter para q a data “//____” foi reconhecida como data válida (em branco).

Qualquer dica será bem vinda.

Obrigado.
Charles

anjomal

Como vc conseguiu a validação no MaskFormatter ? voce extendeu a classe ? :?

valew

C

Eita… heheh foi mau!!!

Eu consegui a validação da data através de extenção da classe MaskFormater e “sobrescrição” o método public Object stringToValue(String value). Assim, fiz avaliar o dados de forma a considerar a minha data vazia como "válida’.

Vcs acham q esta forma é a melhor/correta de tratar este caso???

Obrigado.
Charles

T

Charles, eu estou tendo o mesmo problema mas voce acredito que possa me ajudar.
Usar o COMMIT eh complicado pois ele passa a permitir que o foco se perca com qualquer valor invalido.
Estou com um campo data opicional, ou seja, deve ser todo preenchido ou vazio

Eu achei sua solucao muito boa mas nao consegui usa-la, quando dou override no stringtoValue com o valor " / / " ele passa a APENAS permitir esse como valido.
Como faco para apenas adicionar esse como valido tambem alem do ##/##/#### ?

Valeu
Thiago

Leozin

odeio maskformatter, ódio total! acho um lixo e muito bugado, acontece erros macabros

alguém além de mim usa DocumentFilter? poxa, acho MUITO melhor, muito mesmo! :slight_smile:

C

intaum thiagot, tenho um tempinho q ñ mexo com essas classes. vou dar uma olha e tem me lembrar pra tentar responder a sua pergunta.

se demorar pra responder ñ é descaso e sim falta de tempo msm… hehehehhehehe

t++

V

Puts, to com o mesmo problema…
alguém ai pode me ajudar? Como sobrescrever o stringToValue?

Criado 28 de março de 2004
Ultima resposta 23 de jun. de 2009
Respostas 8
Participantes 6