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