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…

private void CPFKeyPressed(java.awt.event.KeyEvent evt) {                               
      
        try{
            Integer.parseInt(evt.getKeyText(evt.getKeyCode()));
        }
        catch(NumberFormatException err){
            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!!

Alguém pode ajudar? Obrigado!

5 Respostas

Sami_Koivu

Olá,

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

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.

Leia o artigo do GUJ:
Controlando um JTextField e aprenda o jeito certo de fazer.

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

Crie um objeto String para sua classe chamado caracterDigitado;

insira o seguinte código no evento keyTyped do objeto JTextField:

try{

caracterDigitado = String.valueOf(evt.getKeyChar());

Integer.parseInt(caracterDigitado);

}

catch(Exception e){

if(caracterDigitado.equals(".") || caracterDigitado.equals(",") || caracterDigitado.equals("-"))
           {
             //pronto
}
else{
	evt.consume();
	JOptionPane.showMessageDialog(null, "Informe apenas números!");   
}

}

Criado 1 de setembro de 2007
Ultima resposta 13 de nov. de 2009
Respostas 5
Participantes 5