Problema ao pressionar tecla TAB

Pessoal,

Tenho um formulário com vários JTextField, cada um com um tipo de validação diferente, que são acionados ao pressionar a tecla ENTER, gostaria que as validações fossem acionadas também ao pressionar a tecla TAB. O TAB apenas passa o foco do campo, não disparando o evento KeyListener que contem a validação do campo.

Fiz dessa forma, mas sem sucesso:

jTextField.addKeyListener(new KeyAdapter(){ @Override public void keyPressed(KeyEvent e){ if( (e.getKeyCode() == KeyEvent.VK_ENTER) || (e.getKeyCode() == KeyEvent.VK_TAB) ){ //Alguma validação } } }
Desde já, obrigado!

Veja se isso te ajuda:

http://www.java2s.com/Code/Java/Swing-JFC/ValidateavalueonthelostFocusevent.htm

regis_hideki, bem legal esse exemplo que você mostrou, mas infelizmente não é exatamente o que preciso.

Olha o teste que fiz:

Configurei para que ao pressionar a tecla TAB o campo não pudesse estar vazio, se estivesse mostrava uma mensagem de ERRO e não passava o foco para o próximo campo, “beleza era o que precisava”, mas se eu clicar-se em outro campo o evento não deixava, por que o foco só saia do campo com o evento FocusListener caso ele fosse preenchido [e isso não é muito legal].

Você sabe de alguma outra maneira?

Muito Obrigado pela ajuda!

Entendi a situação e não sei como te ajudar.

É que você está usando uma validação que não parece ser muito comum (ao menos pra mim), evitando que o usuário passe para o próximo campo (ao invés de simplesmente mostrar uma mensagem).

Isso é um requisito que deve ser seguido ou é algo que você teve como ideia? Se for só ideia, você poderia considerar mudá-la e apenas mostrar a mensagem de erro ao usuário, sem barrar a passagem pra outro campo. Dessa forma, o “focusLost” funcionaria.

regis_hideki, é simples, vou explicar melhor o que quero.

Suponhamos que eu crie um formulário com 3 campos (JTextField), 3 botões (Gravar, Limpar e Cancelar).

1º campo será o nome do cliente
2º campo será o CPF
3º campo será uma descrição

1º botão gravar no banco de dados
2º botão limpar os campos do formulário
3º botão encerra o cadastro e fecha o formulário

Todos os campos ao pressionar ENTER o foco passa para o próximo campo. Os campo nome e CPF não podem estar vazios, se pressionar ENTER e estiverem vazios é exibido uma mensagem de ERRO “O preenchimento do campo é obrigatório” e o foco continua no campo [mas o foco não fica preso, podendo passar o foco através do clique], se não estiver vazios o foco passa para o próximo campo. O campo descrição não possui restrição podendo estar vazio, ao pressionar ENTER o foco passa para os botões.

Agora vamos simula um cadastro:

Clico no ícone do programa principal e abre a tela de Cadastro de Cliente.

1 - Eu digito o nome do cliente e pressiono ENTER, o foco passa para o campo CPF
2 - Ao digitar o CPF o cliente se esqueceu e não possui o documento em mãos. Então clico no botão Cancelar para encerrar e fechar a tela de cadastro. Mas o evento FocusListener não deixa o foco sair do campo CPF enquanto ele não for preenchido [isso não é legal].

Quero que o TAB faça as mesmas validações que o ENTER, não quero prender o foco no campo, quero que ao pressionar ENTER ou TAB um evento seja disparado para validar os campos.