[RESOLVIDO] Telas diferentes chamando métodos

15 respostas
pedromuyala

Olá companheiros gujeiros! Boa noite. :smiley:

Tenho 17 telas de busca diferentes. Todas elas possuem um JTextField e um JButton. Todos os JTextField possuem um FocusListener e todos os JButton possuem um ActionListener.
Quando o usuário retira o cursor do JTextField o método focusGained(FocusEvent evt) então chama o método modelo.quantResultados(String chave) que mostra o número de resultados que serão exibidos com aquela palavra informada. Quando o usuário clica no JButton o método actionPerformed(ActionEvent evt) então chama o método modelo.exibeResultados(String chave) que mostra os resultados encontrados.

Eu precisei mudar o nome dos dois métodos quantResultados(String chave) e exibeResultados(String chave). Tive que mudar isso manualmente nas 17 telas. :frowning:

A pergunta é a seguinte: [color=blue]Existe alguma maneira de evitar todo esse trabalho de alterar os métodos em todas as telas?[/color] Se 17 telas já deu um trabalhão, imagine o dia que tiver mais de 300 telas. :idea:

Agradeço antecipadamente por ter ajudado ou somente desprendido do seu tempo em tentar ajudar!
Obrigado pessoal mais uma vez pela força! :wink:
Fico no aguardo pelas respostas. [color=red].·.[/color]

15 Respostas

ViniGodoy

É esse o problema de mudar interfaces públicas. A solução é achar uma IDE que faça por você.

Ok, para o problema específico desses listeners… provavelmente é possível resolver o problema separando a classe do Listener numa classe publica, num arquivo separado. Então, passe as dependências como parâmetro e evite a duplicação daquele código.

pedromuyala

Olá ViniGodoy, obrigado por participar do tópico!

Entendi a idéia, resolve perfeitamente. :smiley:

Mas um problema que deixei de citar é que algumas telas tem 3 JTextField’s. Todos os JTextField possuem um FocusListener.
Quando o usuário retira o cursor do PRIMEIRO JTextField o método focusGained(FocusEvent evt) então chama o método modelo.quantResultados(String chave) que mostra o número de resultados que serão exibidos com aquela palavra informada. Quando o usuário retira o cursor do SEGUNDO JTextField o método focusGained(FocusEvent evt) então chama o método modelo.selecionaIdioma(String idioma) que mostra o número de resultados que serão exibidos com aquele idioma. Quando o usuário retira o cursor do TERCEIRO JTextField o método focusGained(FocusEvent evt) então chama o método modelo.pesquisaExata(String chave) que mostra o número de resultados que serão exibidos extamente igual ao digitado.

Faço do mesmo jeito nesse caso, ou seja, implemento FocusListener em 3 arquivos diferentes?
Ou seja, sempre que o método a ser chamado for diferente, eu crio uma classe diferente?

Fico no aguardo pela resposta!
Obrigado ViniGodoy, felicidades rapaz. :wink:

ViniGodoy

Sim. É melhor ter umas 10 classes, do que 72 repetições de 10 métodos (720 pontos de problema).

pedromuyala

Olá ViniGodoy, obrigado por continuar participando do tópico! :smiley:

Podemos dizer que essas classes então são controladores se pensarmos em uma arquitetura MVC?

Obrigado mais uma vez, fico no aguardo pelas respostas!

ViniGodoy

Sim, pode-se fazer essa analogia. Não é muito perfeita, já que o seu controlador continua bastante acoplado, mas é por aí.

pedromuyala

Oi ViniGodoy, me desculpa mas, acoplado ao modelo, você diz?
Obrigado! :wink:

ViniGodoy

Sim.

Mas é um controller sim. O papel do controle é exatamente esse, capturar os eventos do usuário, e estimula-los no modelo. Alguns controllers também validam a entrada, mas é uma eterna guerra saber se isso fica mesmo no controle, na view, ou nas três camadas.

pedromuyala

Olá ViniGodoy, obrigado pelas respostas!

VC me deixou encucado quanto ao acoplamento. :frowning: VC está dizendo que a visão está acoplada ao controle ou o controle está acoplado ao modelo?
Lembrando que o modelo registra os listener(visões) usando o Observer.

Agradeço pelas respostas. Fico no aguardo!
Muitíssimo obrigado Vini! :smiley:

ViniGodoy

No seu caso, o controller ficará acoplado ao modelo. Tipicamente, tenta-se reduzir esse acoplamento nos frameworks.
Mas isso é só um refinamento.

pedromuyala

Olá ViniGodoy, muitíssimo obrigado por continuar atento ao tópico! :smiley:

1) Sim realmente havia discutido esse assunto em um outro tópico. A galera achou melhor deixar todas as validações ocorrerem no modelo e quando necessário informar ao usuário de alguma falha fazer isso por exceções.

2) Só que essa propagação é um problema que não sei resolver quando adoto esse modelo de desacoplamento citado no quote acima. Porque? Não consigo propagar a exceção que ocorre no modelo até as telas quando necessário exibir.

3) Esses frameworks utilizam algum pattern para isso? :idea:

[color=orange][size=15]Obrigadão ViniGodoy por todas as respostas e pelo tempo dedicado em ajudar![/size][/color] :thumbup:
Tenho certeza que muitas pessoas estão aproveitando bem o assunto. Essas dúvidas chatinhas muitas vezes trava um trabalho todo.
Um abração, fico no aguardo pelas respostas! :wink:

pedromuyala

Pessoal os demais que também quiserem participar por favor não deixem de responder! :wink:
E se ficar alguma dúvida ou a pergunta estiver mal feita, por favor, avisem que eu tento explicar melhor.

ViniGodoy

Os frameworks usam diversos patterns para isso, como é o caso da IoC. E usam outro paradigma também, o reflexivo. Outras frameworks web são baseada na comunicação entre camadas através de web-services, deixnado a comunicação entre as camadas restritas a xmls.

Mas eu havia me enganado no primeiro post. Embora não seja um controller avançado, é sim, um controller.

pedromuyala

Oi Vinícius,

Rapaz, me desculpa a curiosidade, mas o que é um controller avançado quando se fala em programação desktop?

Sobre a propagação da exceção sem chance né?
Um abração! Obrigadão. :wink:

ViniGodoy

Dá uma olhada na biblioteca de rich client do spring.

Mas, tipicamente os controllers de desktop são muito mais simples que os de web. Isso porque não existirão computadores separando as várias camadas, e alguns mecanismos simples da linguagem vão resolver o problema com elegância e facilidade.

Se quiser exemplos de controladores mais espertinhos, dá uma olhada na biblioteca de Rich Client do Spring.

pedromuyala

Legal Vinícius, parabéns por participar do tópico! :smiley:
Obrigado por resolver o problema. :thumbup:
Desejo muito sucesso. Felicidades, um abração. :wink:

Criado 2 de outubro de 2009
Ultima resposta 3 de out. de 2009
Respostas 15
Participantes 2