MVC - pelo amor de Deus. alguem tem um exemplo dessa ****?

13 respostas
extreme_z3r0

Galera, estou re-montando um sistema que ja fiz. Sempre quis usar MVC nele, mais nunca consegui encontrar nada que presta sobre mvc. Todo tutorial / apostila que fala de mvc só fala que um controla o outro e atualiza o outro e só isso. O pessoal fica dando volta volta volta e todo mundo falando sempre a mesma coisa e no fim nunca falando nada.

Se alguem tiver alguma coisa sobre MVC ( livro, apostila, tutorial, exemplo, diagrama uml, rabisco no paint,...) mais tem que ser algo diferente daquilo que nego faz pra entregar na facul só por que o professor pediu e copia qualquer asneira falando o de sempre.

No meu sistema (versão antiga) está assim:

Pacotes:
model
->Contato
view
->GuiContatoManipular
persistent
->GerenciadorDeAcessoAoBancoDeDados

*Eu não possuo o Controller pq não sei como usá-lo.*

Contato é um Java Bean. (geters, setters...)

Meu código da GuiContatoManipular é :

* Retirei os imports... gettes, setters e outras asneiras que não interressam no momento.
/**
 * @author Gabriel Henrique Martinez Saraiva
 * 
 * GUI de cadastro de contatos.
 * 
 */
package view.gui.contatos;

@SuppressWarnings("serial")
public class GuiContatosManipular extends Gui {
	
	// Declaração dos objetos =================================================	
	JLabel				labelIdcontato;
	
	// Dados Basicos OK
	JTabbedPane			painelAbas					= new JTabbedPane();
	GuiServicos			guiServicos;
	GuiDesepsas			guiContas;
	
	JTextField			textRazaoSocial				= new JTextField(10);
	JTextField			textNomeCompleto			= new JTextField(30);
	JTextField			textOutros					= new JTextField(10);
	JTextArea			textAreaObs					= new JTextArea(3, 30);
	JDateChooser		calendarioDataDeNascimento	= new JDateChooser();
	JDateChooser		calendarioDataDeCadastro	= new JDateChooser(new Date());
	JComboBox			comboIndicador				= new JComboBox(VariaveisDeSistema.INDICADORES);
	JCheckBox			checkExcluido				= new JCheckBox("Excluido");
	private JScrollPane	scroolGui;
	// Contato OK
	JFormattedTextField	textTelefone				= new JFormattedTextField(Funcoes.criarMascara("(##) ####-####"));
	JTextField			textTelefone2				= new JTextField(14);
	JFormattedTextField	textCelular					= new JFormattedTextField(Funcoes.criarMascara("(##) ####-####"));
	JFormattedTextField	textFax						= new JFormattedTextField(Funcoes.criarMascara("(##) ####-####"));
	JTextField			textEmail					= new JTextField(10);
	JTextField			textContato					= new JTextField(15);
	JTextField			textVinculo					= new JTextField(10);
	
	// Endereço OK
	JTextField			textlogradouro				= new JTextField(10);
	JTextField			textNumero					= new JTextField("0");
	JTextField			textBairro					= new JTextField(10);
	JFormattedTextField	textCep						= new JFormattedTextField(Funcoes.criarMascara("#####-###"));
	JTextField			textCidade					= new JTextField("Araraquara");
	JTextField			textComplemento				= new JTextField(10);
	JTextField			textLocalizacao				= new JTextField(10);
	JFormattedTextField	textUf						= new JFormattedTextField(Funcoes.criarMascara("UU"));
	
	// Documentos OK
	JFormattedTextField	textCpf						= new JFormattedTextField(Funcoes.criarMascara("###.###.###-##"));
	JTextField			textRg						= new JTextField(9);
	JTextField			textCtps					= new JTextField(10);
	JTextField			textCtpsSerie				= new JTextField(10);
	JTextField			textInscricao				= new JTextField(10);
	JTextField			textCnpj					= new JTextField(15);
	
	// Checks de tipo OK
	JCheckBox			checkCliente				= new JCheckBox("Cliente");
	JCheckBox			checkFuncionario			= new JCheckBox("Funcionário");
	JCheckBox			checkFornecedor				= new JCheckBox("Fornecedor");
	JCheckBox			checkVIP					= new JCheckBox("VIP");
	
	// Botões
	JButton				botaoDetalhes				= new JButton("Detalhes");
	
	JButton				botaoSalvar					= new JButton("Salvar");
	
	JButton				botaoAlterar				= new JButton("Alterar");
	JButton				botaoLimpar					= new JButton("Limpar campos");
	JButton				botaoExcluir				= new JButton("Excluir");
	JButton				botaoEtiquetaEndereco		= new JButton("Etiqueta de Endereço");
	PainelDeApoio		painelDetalhes				= new PainelDeApoio();
	PainelDeApoio		painelBotoes				= new PainelDeApoio();
	
	long				idCliente					= 0;
	private boolean		cadastrarApenas				= false;
	
	// Fim Declaração dos objetos
	// ========================================================================
	/**
	 * Parametros: 0 = Nenhum Contato<br>
	 * &gt 0 = Algum contato<br>
	 * -1 = Novo Contato<br>
	 */
	public GuiContatosManipular(long paramID) {
		super("contatosManipular");
		idCliente = paramID;
		configurarGui();
		
		gerenciadorDeAcoes();
		limparCampos();
		if (paramID > 0) {
			carregarContato(paramID);
		}
		montarGui();
		
	}
	
	@Override
	public void configurarGui() {
		
		textNomeCompleto.setFont(VariaveisDeSistema.FONTE_DESTAQUE);
		calendarioDataDeCadastro.setPreferredSize(VariaveisDeSistema.TAMANHO_CALENDARIO);
		calendarioDataDeNascimento.setPreferredSize(VariaveisDeSistema.TAMANHO_CALENDARIO);
		
		botaoDetalhes.setIcon(VariaveisDeSistema.ICONE_DETALHES);
		botaoAlterar.setIcon(VariaveisDeSistema.ICONE_SALVAR);
		botaoSalvar.setIcon(VariaveisDeSistema.ICONE_SALVAR);
		botaoLimpar.setIcon(VariaveisDeSistema.ICONE_LIMPAR);
		botaoExcluir.setIcon(VariaveisDeSistema.ICONE_EXCLUIR);
		botaoEtiquetaEndereco.setIcon(VariaveisDeSistema.ICONE_IMPRIMIR);
		
		botaoDetalhes.setMnemonic('D');
		botaoAlterar.setMnemonic('A');
		botaoSalvar.setMnemonic('S');
		botaoLimpar.setMnemonic('L');
		botaoExcluir.setMnemonic('E');
		
		// Define destaque de campos importantes
		textNomeCompleto.setBackground(VariaveisDeSistema.COR_DESTAQUE_1);
		textTelefone.setBackground(VariaveisDeSistema.COR_DESTAQUE_1);
		checkExcluido.setForeground(VariaveisDeSistema.COR_ALERTA_4);
		comboIndicador.setBackground(VariaveisDeSistema.COR_DESTAQUE_1);
		
		lblTitulo.setFont(VariaveisDeSistema.FONTE_TITULO);
		lblTitulo.setText(idCliente > 0 ? "Contato" : "Cadastro de contatos");
		lblTitulo.setIcon(VariaveisDeSistema.ICONE_CONTATOS);
		
		textNomeCompleto.grabFocus();
		if (idCliente > 0) {
			painelDetalhes.setVisible(false);
		}
		
		textAreaObs.setToolTipText("<html>Esse campo tambem pode ser utilizado para adicionar informações para facilitar a localização." + "<br>Por exemplo: Caso o contato seja a Contratte Limpeza e Serviços Ltda."
				+ "<br>Adicione algumas informações assim:" + "<br>limpeza;dedetização;jardinagem;desentupimento;" + "<br>E quando for realizar uma busca, utilize esses termos.</html>");
		textAreaObs.setBorder(VariaveisDeSistema.BORDA_COMPONENTE_COM_ACAO_ESPECIEAL);
		
		if (idCliente < 1) {
			bloquearCamposPorTipo();
		}
		
	}
	
	@Override
	public void montarGui() {
		try {
			
			xAdd(new JLabel("Nome:"), 0, 1);
			xAdd(textNomeCompleto, 1, 1, 1, 4);
			
			// Tipo do contato
			xAdd(new JLabel("Tipo:"), 6, 1);
			xAdd(checkCliente, 7, 1);
			
			xAdd(checkFornecedor, 8, 1);
			xAdd(checkFuncionario, 9, 1);
			xAdd(checkVIP, 10, 1);
			xAdd(checkExcluido, 11, 1);
			
			// Endereço
			xAdd(new JSeparator(), 0, 2, 1, 12);
			
			xAdd(painelDetalhes, 0, 4, 1, 12);
			painelDetalhes.xAdd(new JLabel("Logradouro:"), 0, 4);
			painelDetalhes.xAdd(textlogradouro, 1, 4, 1, 4);
			painelDetalhes.xAdd(textNumero, 6, 4, 1, 2);
			
			painelDetalhes.xAdd(new JLabel("Indicador:"), 0, 6);
			painelDetalhes.xAdd(comboIndicador, 1, 6, 1, 3);
			
			painelDetalhes.xAdd(new JLabel("Complemento:"), 8, 4);
			painelDetalhes.xAdd(textComplemento, 9, 4, 1, 3);
			painelDetalhes.xAdd(new JLabel("CEP:"), 0, 5);
			painelDetalhes.xAdd(textCep, 1, 5);
			painelDetalhes.xAdd(new JLabel("Bairro:"), 2, 5);
			painelDetalhes.xAdd(textBairro, 3, 5, 1, 1);
			painelDetalhes.xAdd(new JLabel("Cidade:"), 6, 5);
			painelDetalhes.xAdd(textCidade, 7, 5, 1, 3);
			painelDetalhes.xAdd(new JLabel("UF:"), 10, 5, 1, 1);
			painelDetalhes.xAdd(textUf, 11, 5);
			painelDetalhes.xAdd(new JLabel("Localização:"), 6, 6);
			painelDetalhes.xAdd(textLocalizacao, 7, 6, 1, 5);
			
			painelDetalhes.xAdd(new JSeparator(), 0, 7, 1, 12);
			
			// Contato
			painelDetalhes.xAdd(new JLabel("Contato:"), 0, 8);
			painelDetalhes.xAdd(textContato, 1, 8, 1, 3);
			painelDetalhes.xAdd(new JLabel("Telefone 1:"), 6, 8);
			painelDetalhes.xAdd(textTelefone, 7, 8);
			painelDetalhes.xAdd(new JLabel("Telefone 2:"), 8, 8);
			painelDetalhes.xAdd(textTelefone2, 9, 8);
			painelDetalhes.xAdd(new JLabel("Outros:"), 9, 9);
			painelDetalhes.xAdd(textOutros, 10, 9, 1, 2);
			painelDetalhes.xAdd(new JLabel("Celular:"), 10, 8);
			painelDetalhes.xAdd(textCelular, 11, 8);
			painelDetalhes.xAdd(new JLabel("Fax:"), 0, 9);
			painelDetalhes.xAdd(textFax, 1, 9);
			painelDetalhes.xAdd(new JLabel("Email:"), 2, 9);
			painelDetalhes.xAdd(textEmail, 3, 9, 1, 2);
			painelDetalhes.xAdd(new JLabel("Vinculo:"), 6, 9);
			painelDetalhes.xAdd(textVinculo, 7, 9, 1, 2);
			
			painelDetalhes.xAdd(new JSeparator(), 0, 10, 1, 12);
			
			// Documentos
			painelDetalhes.xAdd(new JLabel("CPF:"), 0, 11);
			painelDetalhes.xAdd(textCpf, 1, 11);
			painelDetalhes.xAdd(new JLabel("RG:"), 2, 11);
			painelDetalhes.xAdd(textRg, 3, 11);
			painelDetalhes.xAdd(new JLabel("Razão social:"), 6, 11);
			painelDetalhes.xAdd(textRazaoSocial, 7, 11, 1, 5);
			painelDetalhes.xAdd(new JLabel("CTPS:"), 0, 12);
			painelDetalhes.xAdd(textCtps, 1, 12);
			painelDetalhes.xAdd(new JLabel("SÉRIE:"), 2, 12);
			painelDetalhes.xAdd(textCtpsSerie, 3, 12);
			painelDetalhes.xAdd(new JLabel("CNPJ:"), 6, 12);
			painelDetalhes.xAdd(textCnpj, 7, 12, 1, 2);
			painelDetalhes.xAdd(new JLabel("Inscricão (Estadual/Municipal):"), 9, 12);
			painelDetalhes.xAdd(textInscricao, 10, 12, 1, 2);
			
			painelDetalhes.xAdd(new JLabel("Observações:"), 3, 13);
			painelDetalhes.xAdd(textAreaObs, 4, 13, 3, 8);
			
			if (idCliente <= 0) {
				painelDetalhes.xAdd(botaoSalvar, 0, 14, 1, 2);
				painelDetalhes.xAdd(botaoLimpar, 2, 14, 1, 2);
			} else {
				painelDetalhes.xAdd(botaoAlterar, 0, 14, 1, 2);
				painelDetalhes.xAdd(botaoExcluir, 2, 14);
				painelDetalhes.xAdd(botaoEtiquetaEndereco, 3, 14);
				xAdd(botaoDetalhes, 0, 15, 1, 12);
				xAdd(new JSeparator(), 0, 16, 1, 12);
			}
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	// ===========================================================================Ações
	
	/** Cadastrar contato */
	public void cadastrarcontato() {
		
		try {
			
			if (this.textNomeCompleto.getText().equals("")) {
				JOptionPane.showMessageDialog(null, VariaveisDeSistema.ERRO_VALOR_CAMPO_INVALIDO + " [Cadastrar Contato (Nome Completo)]", VariaveisDeSistema.SISTEMA_NOME, JOptionPane.ERROR_MESSAGE);
				
			} else {
				// Monta o contato.
				Contato novoContato = new Contato();
				
				novoContato.setTipoCliente(checkCliente.isSelected());
				novoContato.setTipoFornecedor(checkFornecedor.isSelected());
				novoContato.setTipoFuncionario(checkFuncionario.isSelected());
				novoContato.setVip(checkVIP.isSelected());
				novoContato.setExcluido(checkExcluido.isSelected());
				
				novoContato.setNomeCompleto(textNomeCompleto.getText());
				novoContato.setRazaoSocial(textRazaoSocial.getText());
				novoContato.setCtps(textCtps.getText());
				novoContato.setCtpsSerie(textCtpsSerie.getText());
				
				novoContato.setTelefone(textTelefone.getText());
				novoContato.setTelefone2(textTelefone2.getText());
				novoContato.setCelular(textCelular.getText());
				novoContato.setFax(textFax.getText());
				novoContato.setEmail(textEmail.getText());
				novoContato.setContato(textContato.getText());
				novoContato.setVinculo(textVinculo.getText());
				novoContato.setOutros(textOutros.getText());
				novoContato.setIndicador(String.valueOf(comboIndicador.getSelectedItem()));
				
				novoContato.setObs(textAreaObs.getText());
				
				// Endereço
				
				novoContato.getEndereco().setLogradouro(Funcoes.corrigirLogradouro(textlogradouro.getText()));
				
				novoContato.getEndereco().setNumero(Integer.parseInt(textNumero.getText().equals("") ? "0" : textNumero.getText()));
				
				novoContato.getEndereco().setBairro(textBairro.getText());
				novoContato.getEndereco().setCidade(textCidade.getText());
				novoContato.getEndereco().setUf(textUf.getText());
				novoContato.getEndereco().setCep(textCep.getText());
				novoContato.getEndereco().setLocalizacao(textLocalizacao.getText());
				novoContato.getEndereco().setComplemento(textComplemento.getText());
				
				// Documentos
				novoContato.setCnpj(textCnpj.getText());
				novoContato.setCpf(textCpf.getText());
				novoContato.setRg(textRg.getText());
				novoContato.setInscricao(textInscricao.getText());
				
				// Datas
				novoContato.setDataDeCadastro(calendarioDataDeCadastro.getDate());
				novoContato.setDataDeNascimento(calendarioDataDeNascimento.getDate());
				
				long id = GerenciadorDeAcessoAoBanco.cadastrarContato(novoContato).getId();
				
				Funcoes.exibirMensagem(VariaveisDeSistema.SUCESSO_REGISTRO_CADASTRADO, VariaveisDeSistema.ICONE_SUCESSO_PEQUENO);
				if (!cadastrarApenas) {
					Funcoes.fecharJanela(this.getComponenteParaExibicao());
					Lancadores.launchContatosManipular(id);
				} else {
					
				}
				
			}
		} catch (Exception e) {
			
			JOptionPane.showMessageDialog(null, e.getCause().getMessage().toString());
		}
		
	}
	
	public void bloquearCamposPorTipo() {
		
		textCnpj.setEnabled(checkFornecedor.isSelected() || checkCliente.isSelected());
		
		textCtps.setEnabled(checkFuncionario.isSelected());
		textCtpsSerie.setEnabled(checkFuncionario.isSelected());
		textRg.setEnabled(checkFuncionario.isSelected());
		textCpf.setEnabled(checkFuncionario.isSelected() || checkCliente.isSelected());
		textRazaoSocial.setEnabled(checkFornecedor.isSelected() || checkCliente.isSelected());
		textInscricao.setEnabled(checkFornecedor.isSelected() || checkCliente.isSelected());
		textCnpj.setEnabled(checkFornecedor.isSelected() || checkCliente.isSelected());
		
	}
	
	public void limparCampos() {
		
		// Limpa todos os campos.
		textNomeCompleto.setText("");
		textlogradouro.setText("");
		textNumero.setText("0");
		textBairro.setText("");
		textCep.setText("");
		textCidade.setText("Araraquara");
		textTelefone.setText("");
		textTelefone2.setText("");
		textCelular.setText("");
		textFax.setText("");
		textEmail.setText("");
		textCpf.setText("");
		textRg.setText("");
		textVinculo.setText("");
		textOutros.setText("");
		textRazaoSocial.setText("");
		textInscricao.setText("");
		textContato.setText("");
		textCnpj.setText("");
		textUf.setText("SP");
		textComplemento.setText("");
		textLocalizacao.setText("");
		calendarioDataDeCadastro.setDate(new Date());
		calendarioDataDeNascimento.setDate(new Date());
		textAreaObs.setText("");
		
		checkCliente.setSelected(true);
		checkFornecedor.setSelected(false);
		checkFuncionario.setSelected(false);
		checkVIP.setSelected(false);
		checkExcluido.setSelected(false);
		
	}
	
	public void carregarContato(long paramID) {
		
		try {
			Contato contato = GerenciadorDeAcessoAoBanco.buscarContato(VariaveisDeSistema.BUSCA_POR_ID + paramID + ";", false, false, false, false, false, false, false, false, false, 0)[0];
			
			// Carrega os dados do Contato para os campos.
			textNomeCompleto.setText(contato.getNomeCompleto());
			textlogradouro.setText(contato.getEndereco().getLogradouro());
			textNumero.setText(String.valueOf(contato.getEndereco().getNumero()));
			textBairro.setText(contato.getEndereco().getBairro());
			textCep.setText(contato.getEndereco().getCep());
			textCidade.setText(contato.getEndereco().getCidade());
			textTelefone.setText(contato.getTelefone());
			textTelefone2.setText(contato.getTelefone2());
			textCelular.setText(contato.getCelular());
			textFax.setText(contato.getFax());
			textEmail.setText(contato.getEmail());
			textCpf.setText(contato.getCpf());
			textRg.setText(contato.getRg());
			textVinculo.setText(contato.getVinculo());
			textOutros.setText(contato.getOutros());
			textRazaoSocial.setText(contato.getRazaoSocial());
			textInscricao.setText(contato.getInscricao());
			textContato.setText(contato.getContato());
			textCnpj.setText(contato.getCnpj());
			textUf.setText(contato.getEndereco().getUf());
			textComplemento.setText(contato.getEndereco().getComplemento());
			textLocalizacao.setText(contato.getEndereco().getLocalizacao());
			calendarioDataDeCadastro.setDate(contato.getDataDeCadastro());
			calendarioDataDeNascimento.setDate(contato.getDataDeNascimento());
			textAreaObs.setText(contato.getObs());
			textCtps.setText(contato.getCtps());
			textCtpsSerie.setText(contato.getCtpsSerie());
			textEmail.setText(contato.getEmail());
			checkCliente.setSelected(contato.isTipoCliente());
			checkFornecedor.setSelected(contato.isTipoFornecedor());
			checkFuncionario.setSelected(contato.isTipoFuncionario());
			checkVIP.setSelected(contato.isVip());
			checkExcluido.setSelected(contato.isExcluido());
			lblTitulo.setText(contato.getNomeCompleto());
			// Tira o botão cadastar e limpar campos
			botaoSalvar = null;
			botaoLimpar = null;
			
			if (contato.isTipoCliente() || contato.isTipoFornecedor()) {
				xAdd(painelAbas, 0, 18, 1, 12);
				if (contato.isTipoCliente()) {
					guiServicos = new GuiServicos(contato.getId());
					painelAbas.add(guiServicos, "Serviços");
					
				}
				if (contato.isTipoFornecedor()) {
					guiContas = new GuiDesepsas(contato.getId());
					painelAbas.add(guiContas, "Compras");
				}
			}
			
		} catch (Exception e) {
			// TODO: handle exception
			e.printStackTrace();
		}
	}
	
	public void atualizarContato() {
		
		try {
			
			if (this.textNomeCompleto.getText().equals("")) {
				JOptionPane.showMessageDialog(null, VariaveisDeSistema.ERRO_VALOR_CAMPO_INVALIDO + " [Alterar Contato (Nome Completo)]", VariaveisDeSistema.SISTEMA_NOME, JOptionPane.ERROR_MESSAGE);
				
			} else {
				// Monta o contato.
				Contato novoContato = new Contato();
				novoContato.setId(idCliente);
				novoContato.setTipoCliente(checkCliente.isSelected());
				novoContato.setTipoFornecedor(checkFornecedor.isSelected());
				novoContato.setTipoFuncionario(checkFuncionario.isSelected());
				novoContato.setVip(checkVIP.isSelected());
				novoContato.setExcluido(checkExcluido.isSelected());
				
				novoContato.setNomeCompleto(textNomeCompleto.getText());
				novoContato.setRazaoSocial(textRazaoSocial.getText());
				novoContato.setCtps(textCtps.getText());
				novoContato.setCtpsSerie(textCtpsSerie.getText());
				
				novoContato.setTelefone(textTelefone.getText());
				novoContato.setTelefone2(textTelefone2.getText());
				novoContato.setCelular(textCelular.getText());
				novoContato.setFax(textFax.getText());
				novoContato.setEmail(textEmail.getText());
				novoContato.setContato(textContato.getText());
				novoContato.setVinculo(textVinculo.getText());
				novoContato.setOutros(textOutros.getText());
				novoContato.setIndicador(String.valueOf(comboIndicador.getSelectedItem()));
				
				novoContato.setObs(textAreaObs.getText());
				
				// Endereço
				novoContato.getEndereco().setLogradouro(textlogradouro.getText());
				try {
					int n = Integer.parseInt(textNumero.getText().trim().replace(",", "."));
					novoContato.getEndereco().setNumero(n);
				} catch (Exception e) {
					Funcoes.exibirMensagem(VariaveisDeSistema.ERRO_PARAMETRO_INVALIDO + " ( Atualizar Contato [Número do endereço inválido])", VariaveisDeSistema.ICONE_ERRO_PEQUENO);
					textNomeCompleto.grabFocus();
					return;
				}
				
				novoContato.getEndereco().setBairro(textBairro.getText());
				novoContato.getEndereco().setCidade(textCidade.getText());
				novoContato.getEndereco().setUf(textUf.getText());
				novoContato.getEndereco().setCep(textCep.getText());
				novoContato.getEndereco().setLocalizacao(textLocalizacao.getText());
				novoContato.getEndereco().setComplemento(textComplemento.getText());
				
				// Documentos
				novoContato.setCnpj(textCnpj.getText());
				novoContato.setCpf(textCpf.getText());
				novoContato.setRg(textRg.getText());
				novoContato.setInscricao(textInscricao.getText());
				
				// Datas
				novoContato.setDataDeCadastro(calendarioDataDeCadastro.getDate());
				novoContato.setDataDeNascimento(calendarioDataDeNascimento.getDate());
				
				GerenciadorDeAcessoAoBanco.alterarContato(novoContato);
				Funcoes.exibirMensagem(VariaveisDeSistema.SUCESSO_REGISTRO_ALTERADO, VariaveisDeSistema.ICONE_SUCESSO_PEQUENO);
				
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void excluirContato() {
		
		// Obtem o id do contato
		
		long idContato = idCliente;
		try {
			if (idContato <= 0) {
				throw new Exception(VariaveisDeSistema.ERRO_ID_INVALIDO);
			}
			// String[] opcoes = { "Excluir", "Cancelar" };
			
			// int resposta = JOptionPane.showOptionDialog(null,
			// Constantes.QUESTAO_EXCLUIR, Constantes.SISTEMA_NOME,
			// JOptionPane.YES_NO_CANCEL_OPTION,
			// JOptionPane.QUESTION_MESSAGE, null, opcoes, opcoes[1]);
			
			// if (resposta == 0) {
			
			GerenciadorDeAcessoAoBanco.excluirContato(idContato);
			Funcoes.exibirMensagem(VariaveisDeSistema.SUCESSO_REGISTRO_EXCLUIDO, VariaveisDeSistema.ICONE_SUCESSO_PEQUENO);
			
			JanelaPrincipal.painelDesktop.remove(this);
			
			// }
			
		} catch (Exception e) {
			
			JOptionPane.showMessageDialog(null, e.getMessage(), VariaveisDeSistema.SISTEMA_NOME, JOptionPane.ERROR_MESSAGE);
		}
		
	}
	
	public void alternarDetalhes() {
		if (painelDetalhes.isVisible()) {
			painelDetalhes.setVisible(false);
			painelAbas.setVisible(true);
			botaoDetalhes.setText("Exibir detalhes");
			
		} else {
			painelDetalhes.setVisible(true);
			painelAbas.setVisible(false);
			botaoDetalhes.setText("Esconder detalhes");
		}
		
	}
	
	/* Metodo sobrescrito */
	@Override
	public void gerenciadorDeAcoes() {
		// TODO Auto-generated method stub
		// Cria action listener CADASTRAR
		
		ActionListener ac = new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				
				// TODO Auto-generated method stub
				bloquearCamposPorTipo();
				
			}
		};
		
		checkFornecedor.addActionListener(ac);
		checkFuncionario.addActionListener(ac);
		checkCliente.addActionListener(ac);
		
		botaoEtiquetaEndereco.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent arg0) {
				
				// TODO Auto-generated method stub
				gerarEtiqueta();
				
			}
		});
		
		botaoSalvar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				cadastrarcontato();
			}
		});
		
		// Cria action listener LIMPAR
		botaoLimpar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				limparCampos();
			}
		});
		botaoAlterar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				atualizarContato();
			}
		});
		botaoExcluir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				excluirContato();
			}
		});
		botaoDetalhes.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				
				alternarDetalhes();
			}
		});
	}
	

	public void gerarEtiqueta() {
		GeradorDeRelatorios gr = new GeradorDeRelatorios();
		try {
			File etiqueta = gr.gerarEtiquetaDeContato(idCliente);
			Funcoes.exibirMensagem(VariaveisDeSistema.SUCESSO_ARQUIVO_EXPORTADO + " [Etiqueta (" + idCliente + ")]", VariaveisDeSistema.ICONE_SUCESSO_PEQUENO);
			
			if (!VariaveisDeSistema.ENDERECO_LEITOR_PDF.trim().equals("")) {
				
				Funcoes.executarProgramaExterno(VariaveisDeSistema.ENDERECO_LEITOR_PDF + " " + VariaveisDeSistema.LEITOR_PDF_PARAMETRO_IMPRESSAO + " \"" + etiqueta.getAbsolutePath() + "\"");
				
			} else {
				Funcoes.exibirMensagem(VariaveisDeSistema.ERRO_PROPRIEDADE_INVALIDA + " [Leitor de PDF (IMPOSSIVEL IMPRIMIR)]", VariaveisDeSistema.ICONE_ERRO_PEQUENO);
			}
			
		} catch (Exception e) {
			if (VariaveisDeSistema.DEBUG) {
				e.printStackTrace();
			}
			Funcoes.exibirMensagem(e.getMessage(), VariaveisDeSistema.ICONE_ERRO_PEQUENO, true);
		}
		
	}
}

Como podem ver no meu código fica junto as "açoes" e o "view", tentei separar o maximo que pude.

Isso ja pode ser considerado um MVC?

Alguem tem um exemplo de como ficaria isso em mvc?

Grato a todos =)

13 Respostas

kicolobo

http://fragmental.com.br/wiki/index.php?title=MVC_e_Camadas

luiz_renato

Dá uma olhada:

http://www.antoniopassos.net/ead/course/category.php?id=4

Luiz Renato

Alexandre_Saudate

Model: tudo, mas absolutamente TUDO, que seu sistema precisar pra ser executado, independentemente da view. Isso inclui classes de domínio, acesso a dados… tudo.
View: Telas JSP, Swing, ou coisa que o valha.

Controller: Pega os dados da view e joga no model. Ou seja: controllers são, em JEE , os Servlets. Em JSE, os listeners… e por aí vai.

Pelo que você postou, entendí que você faz a comunicação da view diretamente com o model. O que é errado! Basta você pensar o seguinte: “se eu trocar minha view por uma, digamos… J2ME, o sistema vai manter a mesma lógica?”

[]´s

extreme_z3r0

asaudate, a persistencia tbem vai para o model? Como assm? Ela vira um sub pacote de model? ou ainda fica separada?

Alexandre_Saudate

Lembre- se de que “model” é uma coisa bastante abrangente. Ele vai desde o seu modelo de domínio, passando pelas regras de negócio… até a persistência. Pra mim, não faz muito sentido você falar em “pacote model” como se um único pacote abrangesse tudo.

Model abrange TUDO que é independente de view :wink:

[]´s

fabiofalci

Aqui tem mais um link
http://sergiotaborda.javabuilding.com/2009/11/mvc-e-camadas/
Olha a boa discussão nos comentários

*edit: vem cá, esse post tb está ‘travando’ o firefox de vcs?
Linha: http://www.guj.com.br/templates/default/js/shCore.js:55

Alexandre_Saudate

fabiofalci:
Aqui tem mais um link
http://sergiotaborda.javabuilding.com/2009/11/mvc-e-camadas/
Olha a boa discussão nos comentários

Sim, bem lembrado…isso já rendeu várias discussões aqui, mas vale lembrar: MVC != camadas.

[]´s

paulofafism

Boa tarde,

A View e onde deve conter apenas os componentes da interface
A função do controller e registrar os eventos dos componentes da View e dispachar os comandos para a Model
A model contem toda logica da aplicação. cadastros, consultas entre outros. E model notifica a view sobre uma determinada mudança, por exemplo quando um registro é incluido na base de dados, para as notificações e eventos atráves de eventos.

Um exemplo simples de MVC usando o Swing que exibe apenas uma mensagem

View deve conter apenas os componentes da interface View
public class FrmHelloWordMVC{
       private JButton button;
       
       public  FrmHelloWordMVC(){
             setLayout(new BorderLayout());
             button = new JButton();
             add(button);
             setSize(300,300);
       }     
        
       public JButton getButton(){
          return button;
       }      
}
Controller
public class HelloWordController implements ModelListener{
       private ModelHello model;
       private FrmHelloWordMVC frame;
  
      public HelloWordController(){              
              frame = new FrmHelloMVC();
              model = new ModelHelloWord();
              init();
              frame.setVisible(true);   
 
      }
  
       //Configura os eventos
       public void init(){
             frame.addActionListener(new ActionListener() {
                   public void actionPerformed(ActionEvent evt) {
                           exibirMensagem();
            }
             });               
             //Registrando o evento na model 
             model.addModelListener(this);
       } 
       
      //Metodo executado pelo botão        
      public void exibirMensagem(){
            model.exibirMensagem();
      }         
 
      //Metodo da interface ModelListener   
      public void mensagemExibida(){
        ///Faz alguma coisa na View
      }      

}
Interface ModelListener
public interface ModelListener
{
    public void mensagemExibida();
}
Model - Classe que contém a lógica de negócio
public class ModelHelloWord{
       //Armazena os eventos registrados
       private ArrayList<ModelListener> listeners = new ArrayList<ModelListener>();

       public void exibirMensagem(){
             System.out.prinln("HELLO MVC");
              for (ModelListener listener : listeners){
                      listener.mensagemExibida();
               }
       }

       //Registra os eventos
       public void addModelListener(ModelListener l){
             listeners.add(l);
       }
         
}
B

Não existe muito sentido aprender MVC fazendo só uma aplicação. A grande pegada dele é reaproveitamento da lógica de negócios, fazendo ela funcionar com dados vindos de diversos sistemas ao mesmo tempo.

Dica: Além da tua aplicação desktop, faça uma web, ou um webservice que façam a mesma coisa, ou mesmo pode fazer uma aplicação desktop completamente nova.

A idéia é empacotar o domínio do seu negócio num lugar só, e fazer que todos esses sistemas usem esse pacote, sem que tenha que mudar uma vírgula dentro dele, mas podendo mudar o que quiser dentro desses sistemas, já que são somente interfaces.

Se conseguir fazer isso, terá aprendido a técnica.

M

fabiofalci:

*edit: vem cá, esse post tb está ‘travando’ o firefox de vcs?
Linha: http://www.guj.com.br/templates/default/js/shCore.js:55

Sim, está. O script de formatação de código costuma travar o Firefox quando ele tem muitas linhas para formatar. Parece que isso não acontece a versão atual (por que a do GUJ está bem antiga…).

wagnerfrancisco

Leia o texto do Philip Calcado que lhe passaram lá no início do tópico. Você tá confundindo camadas com MVC.

Se você quiser um exemplo prático, bem no final do livro Head First - Design Patterns, tem um exemplo beeeem simples de MVC. Eles reutilizam o modelo numa aplicação desktop e web. Você pode procurar por frameworks MVC também. Na Web o MVC geralmente não funciona exatamente como no Desktop, mas vendo o framework vc tem uma idéia do que é.

Falou.

P.S.: extreme z3r0, tu não participava do fórum de slackware, o slacklife? que posteriormente virou slackbr?

extreme_z3r0

sou eu mesmo, o bunitão =) Pessoal daqule forum é nota 10. Só to meio afastado que to longe do meu Slack (Contra vontade) mais logo logo to por la de novo tbem.

Bom, como estou com muito pouco tempo diga-se de passageme como acho que que não vou montar esse sistema pra web (meu medo…) vou deixar essa história de MVC queta, até pq se deus quiser logo logo eu vo pra facul e vejo isso com tempo. Só vou separar por Camadas e beleza =).

Camadas são os : Model, View, Persistent? O_o? Ou eu ja não sei mais nada :?

ai quando eu tiver tempo ou paralelamente a isso que estou montando vou estudar muito e fazer um PUTA DUM TUTORIAL SUPER BASICO - AVANÇADO DE MVC. só pro GUJ =)

abs camaradas.

wagnerfrancisco

extreme z3r0:
sou eu mesmo, o bunitão =) Pessoal daqule forum é nota 10. Só to meio afastado que to longe do meu Slack (Contra vontade) mais logo logo to por la de novo tbem.

Bom, como estou com muito pouco tempo diga-se de passageme como acho que que não vou montar esse sistema pra web (meu medo…) vou deixar essa história de MVC queta, até pq se deus quiser logo logo eu vo pra facul e vejo isso com tempo. Só vou separar por Camadas e beleza =).

Camadas são os : Model, View, Persistent? O_o? Ou eu ja não sei mais nada :?

ai quando eu tiver tempo ou paralelamente a isso que estou montando vou estudar muito e fazer um PUTA DUM TUTORIAL SUPER BASICO - AVANÇADO DE MVC. só pro GUJ =)

abs camaradas.

Eu quase nunca mais entrei lá, mas eu logava lá como ledzeppelin!

O MVC não tem nada a ver com camadas. Camadas são, por exemplo: apresentação, domínio, persistência. MVC normalmente atua sob a camada de apresentação.

Falou!

Criado 29 de janeiro de 2010
Ultima resposta 30 de jan. de 2010
Respostas 13
Participantes 9