Pessoal,
Fiz essa pergunta há algumas semanas http://www.guj.com.br/java/228588-ajuda-validacao-de-campos-em-aplicacoes-swing (Não sei porque está na parte de arquitetura, jurava que tinha colocado na parte de interface gráfica...rs).
O InputVerifier, como sugerido pelo membro ViniGodoy, ajuda bastante a resolver o problema que temos no momento.
Já digo que é a primeira vez que estou mexendo com validações Swing e coisas do tipo, então sei que posso estar indo para um caminho ruim.
O que definimos como padrão de validação para a aplicação vai ficar assim:
Toda vez que um valor novo for colocado em um campo E a validação de domínio ocorrer com SUCESSO um evento será disparado. Esse evento é definido pelo desenvolvedor do módulo em questão (com suas telas e regras de negócios). O evento pode ter código que abra um messageBox ou que dê foco em outro campo da tela, por exemplo (ele também pode demorar para executar).
Sempre que algo do tipo acontece o verify() trava, parece que é algum tipo de deadlock.
Idealmente eu gostaria de ter um listener que me avisasse que o verify() já completou (e se com ou sem sucesso) para eu poder decidir se chamo ou não o evento, mas não achei nada parecido com isso.
O código do verify() está assim por enquanto:
class BasicInputVerifier extends InputVerifier {
@Override
public boolean verify(JComponent input) {
if (input instanceof JTextField) {
String text = ((JTextField)input).getText();
if (isNewValue(text) & validate()) { //validate tem código de validação arbitrário definido pelo usuário dessa API.
event(); //Este evento contém código arbitrário definido pelo usuário dessa API. - NÃO É UM BOM LUGAR PARA ISSO! Mas onde devo colocar?
}
}
return true;
}
}
Tem alguma solução para isso?
Obrigado