Bug sério Máscara

Olá JGalera!!!

Estou tentanto efetuar um cadatro de veículos para ser integrado a um sistema, sendo que no meu banco de dados a chave-primária da tabela onde os dados serão persistidos é a placa do veículo… tipo ABC-1243…

estou utilizando o seguinte código para implementar a máscara no meu JFrame:

....
mfplaca = new MaskFormatter();
mfplaca.setMask("UUU-####");
mfplaca.setPlaceholderCharacter('_');
mfplaca.setValidCharacters("ABCDEFGHIJKLMNOPQRSTUVXYWZ1234567890");
jftfplaca = new JFormattedTextField(mfplaca);
....

O bug é o seguinte… a campo sempre começa com -_, se preencher todos dos caracteres da máscara tudo ok… porém se informar o valor faltando um caracter o valor desse caracter terá como valor assumido o último valor digitado… isso abre margem para grandes problemas…

consegui fazer um tratamento através de um lostFocus() testando se ao sair do campo todos os caracteres foram digitados… porém não consigo llimpar o campo… tipo o usuário tenta passar para o próximo campo informando o valor incompleto… o tratamento joga um JOptionPane na tela dizendo “tá errado” … dá um grabFocus() no campo e mando limpar… porém o problema de pegar o caracter anterior continua…

me deram a solução de remover o JFormattedTextField e instanciar o JMaskFormatter novamente… mas não dá certo… (muito ruim essa solução)…

Estou olhando na documentação das APIs… procurando por um método que venha tratar esse problema…

Se alguém souber de alguma possível solução…

[]´s

Obrigado

Caro colega com problemas no a mascara… É o seguinte eu tb tive esse problema, para resolver, se foi o que eu intendi como errado…

É o seguinte quando você for criar o seu jFormattedTextField vc deve setar setLostFocusBehavor o valor JFormattedTextField.PERSIST. Assim ele vai deixar que você limpe o campo. E não irá retornar o valor antigo

1 curtida

Valeu meu amigo!!! a sua solução resolveu satisfatóriamente o meu problema, tipo juntei ela a um tratamento de foco no JFormattedTextField…

Muito Obrigado!

boa noite,
fiz questão de entrar só pra agradecer ao Akila pela solução, pq desde q comecei a usar JFormattedTextField na faculdade eu sempre tive dificuldades com esse componente, que sempre retornava o valor válido antigo mesmo após limpar os campos com as teclas delete ou backspace. E isso me deixa muito aliviado!

uma das minhas implementações:

JFormattedTextField jftf_Placa = new JFormattedTextField(mask.Mascara("UUU-####"));
jftf_Placa.setFocusLostBehavior(JFormattedTextField.PERSIST);