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!
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.