Boa tarde.
Meus objetos de valor (VO) são models?
Tenho 2 VOs: Orcamento e ListaDeOrcamentos
Eles são Models?
Pelo que li, o model tem que ter estrutura para registrar os Views interessados no model.
Eu deveria transformar o objeto de valor em model ou deveria criar outra classe, herdada dos meus VOs ?
Como eu já te respondí neste tópico (http://www.guj.com.br/posts/list/21574.java), o legal seria ter uma classe separada de model, que trabalharia com um conjuntos de VOs a serem exibidos.
Obrigado.
Eu vou apresentar as listas de objetos em tabelas.
E quanto aos TableModels? O que eu faria com eles?
Deixaria no pacote Model? Deixo no pacote view ? Deixo dentro de alguma outra classe ?
Pode deixar no VIEW.
Obrigado.
Para implementar o MVC eu sempre terei que criar essas classes abaixo?
Vi em um exemplo que tem que implementar o padrão observer para poder notificar as Views interessadas no model. Veja a estrutura na figura em anexo.
GerenciadorOrcamento (model: adicionar, obterLista, excluir)
View
Controller
OrcamentoEvent
OrcamentoListener (interface)
Não precisa implementar tudo necessariamente. Depende do que quer. Olha um exemplo que eu posso usar um model já pronto.
List pessoas = getListaDePessoasLegais(); //lista de objetos Pessoa
DefaultTableModel model = new DefaultTableModel( pessoas.toArray() );
jTable.setModel( model );
Ahm, legal.
Então eu poderia ter um controller e um model derivado de AbstractTableModel. Seria isso?
Ai eu colocaria um código similar ao seu no meu controller.
O controller instancia o objeto Painel, e manda para o table do painel a instancia do TAbleModel. ?
Obrigado,
acho que dessa forma já dá pra implementar.
Pode ser isso.
Um projeto que eu to refazendo eu preferí abstrair tudo e não deixar a camada de negócio saber como trabalha a view.
Então eu trabalho com interfaces. Algo mais ou menos assim:
No meu controller:
CadastroGUI gui = GUIFactory.getCadastroGUI();
gui.show();
List pessoas = getPessoasMalvadas();
gui.mostrarPessoas( pessoas );
E neste caso acima não importa como será a implementação da minha view, seja ela Swing, AWT, SWT ou Thinlet.
E eu tenho uma classe que implementa a interface CadastroGUI, que no método mostrarPessoas() faz assim:
public void mostrarPessoas( List pessoas ) {
DefaultTableModel m = new DefaultTableModel( pessoas.toArray() );
meuJTable.setModel( m );
}
E pronto!
Pq se um dia minha view mudar de Swing pra Thinlet, eu não vou mais usar Models do Swing, portanto o impacto da mudança é pequeno. Só mudo a view e não as outras camadas.
public void mostrarPessoas( List pessoas ) {
DefaultTableModel m = new DefaultTableModel( pessoas.toArray() );
meuJTable.setModel( m );
}
só pra confirmar…
na instanciação do DefaultTableModel teria que passar também um parâmetro referente a lista dos nomes das colunas, nao teria? Ou você já deixa isso em algum outro lugar?
Isso mesmo.