[Resolvido] - Evt.consome aceitando a tecla backSpace

Prezados, boa tarde.

Tenho um campo de texto em um JtextField, e um evento KeyTyped para verificar as teclas pressionadas, aceitando somente letras e outros caracteres por mim definidos, veja o código:

String caracteres = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ´^~´ãÃáÁéÉóÓúÚ";
    
    if(!caracteres.contains(evt.getKeyChar()+""))
    {
        evt.consume();
    }

Meu problema é o seguinte, desta forma o código não aceita a tecla BackSpace caso o usuário queira utilizar, o que deve fazer para o procedimento aceitar a tecla?

Inclua o caractere \b nessa sua lista de caracteres válidos.

Olá, bom dia.

Ontem descobri uma coisa, só não aceita o BackSpace utilizando o LookAndFeel liquid e metal que tenho na minha aplicação. Acrescentei também o carácter \b na lista de caracteres e o BackSpace funcionou em outros Look’s, pode me responder o por que de \b habilitar o uso do botão?

O caractere '\b' é o caractere do backspace, a lógica que você implementou faz o seguinte:
se o caractere digitado não estiver na lista de caracteres válidos, você consome o evento através do event.consume().
Um evento consumido não é tratado por outros listeners, inclusive os listeners internos do componente.
Então como o backspace não estava na lista de caracteres válidos, o evento era consumido e os listeners internos do componente ignoravam o pressionamento, então para o componente é como se não fosse pressionado nada.

String caracteresValidos = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ´^~´ãÃáÁéÉóÓúÚ";
String caractereDigitado = "" + event.getKeyChar();
if( ! caracteresValidos.contains( caractereDigitado ) ) {
    event.consume(); // se o caractere digitado não é válido, consome o evento
}
1 curtida

Muito obrigado pela explicação.

1 curtida