Bug sério Máscara

3 respostas
F

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

3 Respostas

Akila

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

F

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!

H

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);
Criado 10 de novembro de 2004
Ultima resposta 10 de jul. de 2014
Respostas 3
Participantes 3