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