Campo JFormattedTextField não apaga o valor

Criei uma máscara para um campo e aparentemente está funcionando normal. Mas caso eu insira um valor no campo e saia dele (dando tab, por exemplo) e depois eu volte no campo e apague o valor, quando eu saio dele novamente, ele retorna o valor que estava, não respeitando o fato do usuário ter deixado o campo em branco.

Segue abaixo como formatei o campo. Alguém sabe o motivo deste erro?

try { formato_cpf = new MaskFormatter ("###.###.###-##"); }
catch (Exception erro){
JOptionPane.showMessageDialog(null, “Não foi possível criar máscara para o campo CPF: " +
”\n\n" + erro);
}
jftf_cpf = new JFormattedTextField(formato_cpf);

É isso ai mesmo, particularmente odeio este tipo de campo, é uma porcaria. Vc vai precisar fazer gambiarra se quer que isso funcione.
Basicamente sempre que vc insere um valor inválido à mascara e sai do campo, ele volta ao último valor válido.
Neste caso vc vai precisar capturar o evento de sair do campo, verificar se está em branco, e setar NULL no VALOR (não no texto). +/- isso resolve.

E como eu faço isso, poderia me explicar? Sou da área de TI mas estou entrando na área de programação agora.

Buenas @ancarva

tu terás que settar o valor do field como null,

o própio JTextField possui diversos métodos auxiliares, com o eclipse você pode dar uma olhada em todos que estão disponíves apenas botando um ponto " . " na instancia dele

formato_cpf.setValue(null);
ou
formato_cpf.setValue(" ");

abraço!

Certo, mas como eu capturo o evento de sair do campo para setar o campo como null?

Bom dia @ancarva

Tu pode utilizar da técnica de STATES, criando uma class ‘ENUM’.

Tipo, eu aprendi isso no trampo, não sei nenhum material específico pra te indicar,
Mas da uma procurada no youtube e no google sobre Enum e States que isso vai te ajudar muito…

abraço!

Consegui irmão. Fiz o seguinte:

private void jftf_cnpjFocusLost(java.awt.event.FocusEvent evt) {
// TODO add your handling code here:
if (" . . / - “.equals(jftf_cnpj.getText())) {
jftf_cnpj.setValue(”");
}
}

1 curtida

Para que um valor permaneça em um JFormattedTextField após perder o foco, utilize:

SeuCampo.setFocusLostBehavior(javax.swing.JFormattedTextField.PERSIST);