[RESOLVIDO]Não consigo pegar a tecla pressionada e nem pintar o campo

Olá pessoal, to fazendo uma aplicação aonde o usuário vai informar um nome e vou verificar se o nome possui de 3 a 6 caracteres e se são apenas caracteres. Se não estiver dentro deste padrão, quero pintar o JTextField de vermelho para mostrar que o campo está incorreto. Já tentei de várias formar. Tentei através do FocusLost, formWndowActived, formWindowOpened, mas não obtive sucesso. Tenho 7 TextField e quero validar eles em tempo real, ou seja, o cara digitou errado, quando ele digitar Tab ou ir para o próximo campo, o campo já deve dar o sinal se algo estiver errado, por isso eu estava tentando usar o FocusLost.

[code]
private void jTextField1FocusLost(java.awt.event.FocusEvent evt) {
final Controller controle = new Controller();

      jTextField1.addKeyListener(new java.awt.event.KeyAdapter(){

        @Override
        public void keyPressed(KeyEvent ke) {
           if(ke.getKeyCode() == KeyEvent.VK_TAB){
               if(!controle.isAlfabetico(jTextField1.getText())){
                     JOptionPane.showMessageDialog(null, "a");
                     jTextField1.setBackground(Color.red);
               }
           }
        }
    });
      
}                [/code]
 public boolean isAlfabetico(String campo){
		if(campo.length()>=3 && campo.length()<=6)
            return campo.matches("[A-Z a-z ]{"+campo.length()+"}");     // adiciona  um tamanho para informar ate onde vai verificar se eh letra
		return false;
    }   

Este é o código que eu estou tentando mas não funciona. Este método para verificar se é alfabeto, está funcionando perfeitamente, já testei ele aqui.
Obs: coloquei aquele JOptionPane ali só pra ver se estava sendo chamado, mas ele nem se quer executa. :frowning:
:oops:

Cara,

Eu criei um JFrame, coloquei nele 2 jTextField, no primeiro adicionei o evento LostFocus

e coloquei a parte do teu código que faz a operacao retirando todos aqueles keyPressed que nao sei para que estao lá e funcionou:

Se vai usar LostFocus nao precisa verificar se digitou tab. O tab muda o foco e pronto o evento eh disparado.

public boolean isAlfabetico(String campo){   
        if(campo.length()>=3 && campo.length()<=6)   
           return campo.matches("[A-Z a-z ]{"+campo.length()+"}");     // adiciona  um tamanho para informar ate onde vai verificar se eh letra   
        return false;   
   }   
    
    private void jTextField1FocusLost(java.awt.event.FocusEvent evt) {

        if(!isAlfabetico(jTextField1.getText())){   
            JOptionPane.showMessageDialog(null, "a");   
            jTextField1.setBackground(Color.red);
        } 

    }

[quote=JoaoBluSCBR]Cara,

Eu criei um JFrame, coloquei nele 2 jTextField, no primeiro adicionei o evento LostFocus

e coloquei a parte do teu código que faz a operacao retirando todos aqueles keyPressed que nao sei para que estao lá e funcionou:

Se vai usar LostFocus nao precisa verificar se digitou tab. O tab muda o foco e pronto o evento eh disparado.

[code]
public boolean isAlfabetico(String campo){
if(campo.length()>=3 && campo.length()<=6)
return campo.matches("[A-Z a-z ]{"+campo.length()+"}"); // adiciona um tamanho para informar ate onde vai verificar se eh letra
return false;
}

private void jTextField1FocusLost(java.awt.event.FocusEvent evt) {

    if(!isAlfabetico(jTextField1.getText())){   
        JOptionPane.showMessageDialog(null, "a");   
        jTextField1.setBackground(Color.red);
    } 

}

[/code][/quote]

Cara, obrigado. Funcionou!