Evt.consume() não funciona no evento keyPressed de um JTextField! Ajuda!
5 respostas
antoniodourado
Olá pessoal… estou tentando fazer uma validação de campos numéricos a partir do evento keyPressed mas estou tendo problemas…
vejam o código…
privatevoidCPFKeyPressed(java.awt.event.KeyEventevt){try{Integer.parseInt(evt.getKeyText(evt.getKeyCode()));}catch(NumberFormatExceptionerr){JOptionPane.showMessageDialog(null,"Informe apenas números!");evt.consume();}}
Pois bem… acontece o esperado para numeros mas qdo eu coloco uma letra, ele emite a mensagem "Informe apenas numeros mas NÃO executa corretamente o CONSUME(), ou seja, a letra vai la pro JTextField do mesmo jeito!!
Em vez de usar keyPressed, não daria para você usar o keyTyped? Você consume o evento keyPressed, mas aparentemente o JTextField utiliza o keyTyped para adicionar a letra no campo.
public void keyTyped(KeyEvent e) {
try {
Integer.parseInt(String.valueOf(e.getKeyChar()));
} catch (NumberFormatException err) {
JOptionPane.showMessageDialog(null,
"Informe apenas números!");
e.consume();
}
}
[]s,
Sami
antoniodourado
Cara, eh exatamente o que eu precisava!!!
Mto obrigado!!!
H
hugo_pinho
Usei este exemplo em um programa, porém preciso entrar com valores flutuantes no programa e este método aí do exemplo não autorizou o uso caracter algum inclusive ponto(.) e vírgula(,).
Como faria para liberar o uso de ponto e vírgula?
Obrigado
ViniGodoy
Isso porque usar eventos para isso que você quer é uma péssima idéia.
Ah sim, se vc está lidando com eventos, veja o que acontece no caso do CTRL+C e CTRL+V. Depois, experimente fazer copiar e colar com o mouse. Logo você entende porque a dica do artigo é muito melhor que manipular eventos.
A
ayrtonmonier
Crie um objeto String para sua classe chamado caracterDigitado;
insira o seguinte código no evento keyTyped do objeto JTextField: