Luiz, to com você!
99% das GUIs que eu faço tem algum tipo de especialização que faz lembrar o MVC: o que é tela não é dado, o que é dado não é tela, e o que é fluxo não é nenhum dos dois.
Pois bem, mas o Swing utiliza MVC em cada componente, isso significa que todo JComponent tem estado, tem código de geração e manipulação de eventos e código para desenhar na tela.
A parte de eventos é baseada na idéia de propriedades que os JavaBeans utilizam, associados a eventos específicos da era AWT. Os botões (e nesse caso estou falando de javax.swing.AbstractButton, por isso pode ser JMenuItem, JCheckBox, JButton, tanto faz) manipulam objetos do tipo Action (javax.swing.Action).
Gerar actions faz parte da filosofia dos botões. Você deveria ouvir, numa gui, eventos para os botões que aparecem nela. Isso facilita, posteriormente, a criação de um menu, ou a alteração do comportamento daquela tela sem mudar o resto, obtendo baixo acoplamento que é importante num desenho OO.
Por exemplo, vc tem um JPanel com um formulário a ser preenchido. O formulário preenchido deve ir para o banco. Como fazer??
- Primeiro, tudo o que é persistente devia ter uma classe própria. Então, vamos inventar a classe Projeto, que contém os dados do projeto:
- JTextField nome;
- Date dataCriacao;
- Developer Responsável;
- String Contratante;
- Você delega o salvamento em banco para a outra camada, uma instância da classe (suponha) DatabaseManager:
- Sua GUI tem um botão Salvar e um Cancelar, como é típico:
- JButton salvar;
- JButton cancelar;
Normalmente, eu “ouço” os botões no próprio JPanel, pra poder ter código assim:
public void actionPerformed(ActionEvent evt) {
Object obj = evt.getSource();
if (obj == salvar) {
doSalvar();
}
else if (obj == cancelar) {
doCancelar();
}
}
Isso não te impede de continuar usando o MVC, mas agora em outro nível. Para salvar, vc constrói uma instância de Projeto com os dados do formulário e usa o DatabaseManager pra salvá-lo.
Isso é útil porque se vc muda a classe Projeto, vc não tem que mudar o código de muitas outras classes, mas só onde interessa. Da mesma forma, se em vez de um responsável você quer ter vários, vc pode mudar o seu JComboBox para uma JList sem alterar muita coisa.
O objetivo de um desenho MVC é esse mesmo.
Putz, que mensagem imensa!! : ))
[]s