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?
Eu não entendi muito bem o seu erro, mas preste bastante atenção para ver se não é coisa do navegador…
V
vini.franke
minha aplicação é desktop cara…
O problema é o seguinte… quando eu apago os dados do campo e dou um “TAB” por exemplo, voltam no campo os dados que eu tinha digitado!
V
vini.franke
alguém aí pra ajudar?
L
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 …
V
vini.franke
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 …
Leonardo, o TAB foi só um exemplo, isso acontece sempre que o JFormattedTextField perde o foco…
L
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!
V
vini.franke
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!
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!
Para reescrever vc teria que estender o JFormater !! e redefinir o método que faz essa ação!
Aconselho ler os tutoriais da sun…
L
leonardocregis
"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!
cara, mas o PERSIST faz com que alguns campos do JFormattedTextField, da máscara mais precisamente, possam ficar sem preenchimento.
Exemplo: “1/ / 9”
R
roger_rf
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.
V
vini.franke
existe essa máscara “99/99/9999”?
R
roger_rf
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.
Bem, como na verdade não consegui implementar a idéia inicial, acabei criando outra solução:
Usando o o setFocusLostBehavior(JFormattedTextField.PERSIST) o usuário pode deixar campos em branco, para isso, fiz uma verificação:
Então… se o tamanho do meu campo (retirando os espaços em branco) for menor que 8, não irá passar…
Vou procurar mais coisas e ver se consigo achar algo sobre os JFormattedTextField no sentido principal da minha idéia.
Valeu a todos pela ajuda!
M
Matusalemcassim
vc tem que dar um .setText(null) assim resolve o problema.
M
MlkZica
Matusalem.....
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:
Crie uma classe teste bem simples com apenas 1 campo formatado e post aqui.
A partir dela poderei ajuda-lo!
Tchauzin!
M
MlkZica
Galera…
Muito obrigado.
Analizando tudo o que fiz… percebi um erro que bloqueava tudo.
Ao invés de usar o “JFormatedTextField” eu estava usando o “JTextField”.
E o campo “JTextField” até aceita as mask, porém não consigo usar os setValue(), ou o setOverWriteMode,… por isso que eu tinha muita dificuldade !
Agradeço a Todos que contribuirão com esse tópico !