Tenho a seguinte dúvida:
Tenho a classe framePrincipal e a classe processoSalvado, dentro de um memo pacote. A classe framePrincipal é apenas Swing (botões, textarea, panel, etc). A classe processoSalvado faz acesso a banco (JDBC) e gerencia uma necessidade de negócio.
Ocorre que a partir de um método da classe processoSalvado (métido processoCargaSalvado) necessito inserir linhas em um atributo textarea que encontra-se na classe framePrincipal e também executar um método que está na classe framePrincipal.
Qual a melhor forma de eu executar isto ? Alguem tem sugestão ou exemplo ?
Obrigado.
Reflection;
Object paramDados[] = new Object[] {new Integer(tipo)};
Method grava = obj.getClass().getMethod("GravaDados", new Class[] {int.class});// gravadados e metodo da classe que vc passou na variavel obj no seu caso framePrincipal
grava.invoke(obj,paramDados);
Reflection?!?!!?!?!?
Com refletion é realmente possível, mas é provavelmente o jeito mais difícil, menos escalável e menos elegante. Fora que, se você tiver erros, espere-os em runtime, não em tempo de compilação.
Ao invés de reflection você tem algumas alternativas:
-
Faça sua classe processoSalvado receber como parâmetro o frame. Ou, melhor do que isso, faça processoSalvado receber uma interface com alguns métodos que processo salvado vai chamar para fazer as atualizações e ponha seu frame para implementar essa interface;
-
Torne seu frame um observer de processoSalvado. Assim, processoSalvado dispará eventos e fica a cargo do próprio frame adicionar linhas no textArea e chamar seu método interno. Essa é uma das alternativas mais elegantes, pois mantém a separação da camada view (seu frame) e do objeto de negócio processoSalvado
Recorra a reflection apenas em último caso. Via de regra, use somente para que ela serve: manipular classes e objetos que não estão presentes no momento da compilação.
ViniGodoy ,
O reflaction é realmente mais complexo.
Eu já havia partido para a sua sugestão, só não havia percebido a possibilidade do OBSERVER.
Tem como me fornecer um exemplo ?
ViniGodoy,
Ficou perfeito. Valeu a força.