E ae pessoal, estou com um problema com um campo do tipo JFormattedTextField.
Este campo possui uma máscara para data ( ##/##/#### ). Quando eu digito um valor válido ( que preencha todos os espaços da máscara ) e o apago, no campo volta o valor que eu tinha digitado anteriormente.
Existe algum parâmetro para modificar isso, para que o campo não assumo o último valor válido digitado?
Bom,
pode ser que o tab esteja acionando alguma coisa que esteja “voltando” o texto … ou seja efetivamente os dados não foram excluídos.
Você consegue capturar a ação do tab com algum keypress?? Se conseguir, você pode limpar o texto forçada mente, já que ele não está sendo …
[quote=leonardocregis]Bom,
pode ser que o tab esteja acionando alguma coisa que esteja “voltando” o texto … ou seja efetivamente os dados não foram excluídos.
Você consegue capturar a ação do tab com algum keypress?? Se conseguir, você pode limpar o texto forçada mente, já que ele não está sendo …[/quote]
Leonardo, o TAB foi só um exemplo, isso acontece sempre que o JFormattedTextField perde o foco…
[quote=leonardocregis]Então veja o evento de perder o foco!!
Talvez ele esteja re-renderizando a tela com algo que já deveria ter sido removido![/quote]
Leonardo… testei esses parâmetros:
mas nem um desses tem o efeito que eu quero, alguns fazem com que o JFormattedTextField aceite que seus campos não estejam totalmente preenchidos, mas realmente não é isso que eu pretendo.
Andei vendo, parece que eu tenho que “sobrescrever” o método stringToValue do classe MaskFormatter… mas não sei como posso fazer isso!
"FormattedTextField.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. "
De acordo com o que foi escrito , presumo que se você capturar o erro , então você poderá ver qual foi o valor que foi preenchido de forma a você atualizar da forma que vc acha mais adequada!
Então acho que a máscara que você precisa é “99/99/999”, não “##/##/####”. De qualquer forma, usar “##/##/####” e ter espaços em branco, como em “1/ / 9”, é perfeitamente aceitável para mim - você pode (in)validar o valor e tomar providências quando o usuário clicar OK para confirmar os dados (é a forma que prefiro) ou quando o JFormattedTextField perder o foco.
Ops, a máscara “99/99/9999” não existe - devia estar com a cabeça em outra linguagem, sinto muito pelo engano. Mas, voltando à discussão principal, você pode ler o texto digitado no JFormattedTextField, extrair com substring().trim() os dados de interesse (dia, mês e ano), validar estes dados, e por fim construir um objeto java.util.Date contendo a data digitada pelo usuário.
Estou com o mesmo problema que o “vini.franke”… e usei esse o codigo que vc informou e não obtive nenhum sucesso. Não mudou absolutamente nada ! Continua puxando o valor digitado anteriormente.
Tem como me ajudar ?
Adiciono a minha mascara no próprio JTextField do projeto. Exemplo do CEP: