A lógica que estou tentando implementar é a seguinte:
O usuário preenche o primeiro campo (usuario) e pressiona Tab para ir ao campo senha;
Ao perder o foco do campo usuario, chamo um método que o valida;
Caso não seja validado, retorna ao campo usuario (uso um usuario.requestFocus());
Estando validado o usuario, deve ser preenchido o campo senha, o qual ao perder o foco chamo um método para validar a senha;
Caso esteja errada, deve apagar o que foi preenchido no campo senha e no campo usuario, retornando ao campo usuario para recomeçar o procedimento;
Caso senha válida, ao perder o foco, passa para o campo curso, executando a mesma rotina do campo senha, ou seja: se não for um curso valido, retorna ao campo usuario.
O que está ocorrendo: quando o campo senha é inválido (em branco ou senha errada), ao pressionar a tecla Tab, a aplicação entra em um loop infinito de “curso inválido”.
Alguém poderia dar uma ajuda? Já consultei o Javadoc da SUN sobre eventos e foco, mas não foi muito esclarecedor.
Ok, mas eu gostaria que o foco voltasse ao campo curso, ou seja, se o usuário digita um curso que não é válido, o cursor deveria voltar para este campo até que ele preencha com um valor correto ou clique no botão Sair (o que também não está acontecendo…)
Vou colocar o trecho do código em questão:
public void focusLost(FocusEvent evt)
{
Object obj = evt.getSource();
String usuario = textFieldUsuario.getText();
String password = new String(passwordFieldSenha.getPassword());
String curso = textFieldCurso.getText();
if (obj == textFieldUsuario)
{
if(!ss.usuarioOk(usuario))
{
textFieldUsuario.setText("");
textFieldUsuario.requestFocus();
}
}
else
{
if (obj == passwordFieldSenha)
{
if (!ss.senhaOk(usuario, password))
{
textFieldUsuario.setText("");
passwordFieldSenha.setText("");
textFieldUsuario.requestFocus();
}
}
else
if (obj == textFieldCurso)
{
if(!ss.cursoValido(curso))
{
textFieldCurso.setText("");
textFieldUsuario.requestFocus(); // Aqui volta para o campo usuario
// mas gostaria que voltasse para curso
}
else
if (ss.existeCurso(curso))
{
jButtonOK.setEnabled(true);
jButtonCRIAR.setEnabled(false);
}
else
{
if(ss.sPapel(usuario).equals("Professor"))
{
jButtonOK.setEnabled(false);
jButtonCRIAR.setEnabled(true);
}
}
}
}
}
if(!ss.cursoValido(curso)) {
textFieldCurso.setText("");
// então é só alterar essa linha.
// Voce definiu que o foco deve ir para o campo usuario, coloque para ir para o campo curso
textFieldCurso.requestFocus();
}