Onde fica o controller em uma aplicação java desktop?
5 respostas
java
A
Ablaze
Estou usando o padrão MVC em uma aplicação desktop e gostaria de saber onde a camada do controller se aplicaria. pelo que sei o controller é responsável por ligar o model e a view. Ele pega os dados da view e manda pro model. Tentei implementar em uma aplicação desktop mas não sei se está correto. Eu codifico os dados da view no controller e chamo o controller na view para gerenciar os dados. Mandarei um pequeno exemplo abaixo. Alguém poderia informar se fiz correto ?
Achei que essa abordagem que vc fez ficou bacana. Vc criou uma dependência da view com a controller e vice-e-versa neh.
A
Ablaze1 like
Isso mesmo. Eu fiz o gerenciamento dos dados da view na camada controller e na camada da view eu apenas chamo o controller para realizar o gerenciamento. Minha dúvida era se minha lógica em relação ao controller estava correta. Como vc achou legal, acredito que esteja tudo ok. Obrigado por responder!
Lucas_Camara
Por curiosidade, vc poderia mandar o código das classes View e a Controller (dessa view) pra gente dá uma olhada?
A
Ablaze
Posso sim. Se tiver algo errado ou estranho pode me avisar. Estou aqui para aprender.
Controller
publicclassPacienteControllerimplementsGenericInterfaceController{privateTelaPacienteview;publicPacienteController(TelaPacienteview){this.view=view;}@OverridepublicvoidatualizarTabela(){PacienteDAOrepositorio=newPacienteDAO();ArrayList<Paciente>pacientes=repositorio.listarTodos();DefaultTableModelmodelo=newDefaultTableModel();modelo.addColumn("ID");modelo.addColumn("Nome");modelo.addColumn("Idade");modelo.addColumn("CPF");modelo.addColumn("Sexo");modelo.addColumn("UF");modelo.addColumn("CEP");modelo.addColumn("Cidade");modelo.addColumn("Bairro");modelo.addColumn("Rua");modelo.addColumn("Número");for(Pacientepaciente:pacientes){modelo.addRow(newObject[]{paciente.getId(),paciente.getNome(),paciente.getIdade(),paciente.getCpf(),paciente.getSexo(),paciente.getEndereco().getUf(),paciente.getEndereco().getCep(),paciente.getEndereco().getCidade(),paciente.getEndereco().getBairro(),paciente.getEndereco().getRua(),paciente.getEndereco().getNumero(),});this.view.getTabelaPaciente().setModel(modelo);}}@Overridepublicvoidsalvar(){Pacientepaciente=newPaciente();Enderecoendereco=newEndereco();PacienteModelvalidar=newPacienteModel();paciente.setNome(this.view.getTfNome().getText());paciente.setIdade(Integer.parseInt(this.view.getTfIdade().getText()));paciente.setCpf(this.view.getTfCpf().getText());if(this.view.getrFeminino().isSelected()){paciente.setSexo(this.view.getrFeminino().getText());}else{paciente.setSexo(this.view.getrMasculino().getText());}endereco.setUf(this.view.getCbEstado().getSelectedItem().toString());endereco.setBairro(this.view.getTfBairro().getText());endereco.setCep(this.view.getTfCep().getText());endereco.setCidade(this.view.getCbCidade().getSelectedItem().toString());endereco.setNumero(Integer.parseInt(this.view.getTfNumero().getText()));endereco.setRua(this.view.getTfRua().getText());paciente.setEndereco(endereco);validar.validarPaciente(paciente,"salvar");}@Overridepublicvoideditar(){Pacientepaciente=newPaciente();Enderecoendereco=newEndereco();PacienteModelvalidar=newPacienteModel();intcodigo=Integer.parseInt(String.valueOf(this.view.getTabelaPaciente().getValueAt(this.view.getTabelaPaciente().getSelectedRow(),0)));paciente.setId(codigo);paciente.setNome(this.view.getTfNome().getText());paciente.setIdade(Integer.parseInt(this.view.getTfIdade().getText()));paciente.setCpf(this.view.getTfCpf().getText());if(this.view.getrFeminino().isSelected()){paciente.setSexo(this.view.getrFeminino().getText());}else{paciente.setSexo(this.view.getrMasculino().getText());}endereco.setUf(this.view.getCbEstado().getSelectedItem().toString());endereco.setBairro(this.view.getTfBairro().getText());endereco.setCep(this.view.getTfCep().getText());endereco.setCidade(this.view.getCbCidade().getSelectedItem().toString());endereco.setNumero(Integer.parseInt(this.view.getTfNumero().getText()));endereco.setRua(this.view.getTfRua().getText());paciente.setEndereco(endereco);validar.validarPaciente(paciente,"alterar");}@OverridepublicvoidbloquearCampos(booleanbloquear){this.view.getTfNome().setEnabled(!bloquear);this.view.getTfBairro().setEnabled(!bloquear);this.view.getrMasculino().setEnabled(!bloquear);this.view.getrFeminino().setEnabled(!bloquear);this.view.getTfCep().setEnabled(!bloquear);this.view.getTfCpf().setEnabled(!bloquear);this.view.getTfIdade().setEnabled(!bloquear);this.view.getTfNumero().setEnabled(!bloquear);this.view.getTfRua().setEnabled(!bloquear);this.view.getCbCidade().setEnabled(!bloquear);this.view.getCbEstado().setEnabled(!bloquear);}@OverridepublicvoidlimparCampos(){this.view.getTfNome().setText("");this.view.getTfBairro().setText("");this.view.getTfCep().setText("");this.view.getTfCpf().setText("");this.view.getTfIdade().setText("");this.view.getTfNumero().setText("");this.view.getTfRua().setText("");this.view.getrFeminino().setSelected(false);this.view.getrMasculino().setSelected(false);this.view.getCbCidade().removeAllItems();}}@OverridepublicvoidbtnAlterar(){try{this.view.setFuncao("alterar");PacienteDAOrepositorio=newPacienteDAO();intlinha=this.view.getTabelaPaciente().getSelectedRow();longcodigo=Long.parseLong(String.valueOf(this.view.getTabelaPaciente().getValueAt(linha,0)));PacientepacienteEncontrado=repositorio.listarPorId(codigo);if(pacienteEncontrado==null){bloquearCampos(true);}else{bloquearCampos(false);}this.view.getTfNome().setText(pacienteEncontrado.getNome());this.view.getTfCpf().setText(pacienteEncontrado.getCpf());this.view.getTfCpf().setEnabled(false);this.view.getTfIdade().setText(String.valueOf(pacienteEncontrado.getIdade()));this.view.getTfCep().setText(pacienteEncontrado.getEndereco().getCep());this.view.getTfRua().setText(pacienteEncontrado.getEndereco().getRua());this.view.getTfBairro().setText(pacienteEncontrado.getEndereco().getBairro());this.view.getTfNumero().setText(String.valueOf(pacienteEncontrado.getEndereco().getNumero()));this.view.getCbEstado().setSelectedItem(pacienteEncontrado.getEndereco().getUf());this.view.getCbCidade().setSelectedItem(pacienteEncontrado.getEndereco().getCidade());}catch(Exceptione){JOptionPane.showMessageDialog(null,"Escolha um paciente para editar!");}}@OverridepublicvoidbtnExcluir(){try{PacienteDAOrepositorio=newPacienteDAO();intlinha=this.view.getTabelaPaciente().getSelectedRow();longcodigo=Long.parseLong(String.valueOf(this.view.getTabelaPaciente().getValueAt(linha,0)));Pacientepaciente=repositorio.listarPorId(codigo);switch(JOptionPane.showConfirmDialog(null," Tem certeza que deseja excluir ? ","Confirmar exclusão",JOptionPane.YES_NO_OPTION,JOptionPane.QUESTION_MESSAGE)){case0:repositorio.excluir(paciente);break;case1:break;}}catch(Exceptione){JOptionPane.showMessageDialog(null,"Escolha um paciente para excluir!");}
View
publicclassTelaPacienteextendsjavax.swing.JInternalFrame{privateStringfuncao;privatePacienteControllercontroller;/** * Creates new form TelaPaciente */publicTelaPaciente(){initComponents();controller=newPacienteController(this);this.controller.bloquearCampos(true);this.controller.atualizarTabela();}privatevoidbtnExcluirActionPerformed(java.awt.event.ActionEventevt){// TODO add your handling code here:this.controller.btnExcluir();this.controller.atualizarTabela();}privatevoidbtnSalvarActionPerformed(java.awt.event.ActionEventevt){// TODO add your handling code hereif(this.funcao.equals("salvar")){this.controller.salvar();this.controller.atualizarTabela();this.controller.bloquearCampos(true);}elseif(this.funcao.equals("alterar")){this.controller.editar();this.controller.atualizarTabela();this.controller.bloquearCampos(true);}}privatevoidbtnCancelarPesquisaActionPerformed(java.awt.event.ActionEventevt){// TODO add your handling code here:this.controller.atualizarTabela();}privatevoidbtnEditarActionPerformed(java.awt.event.ActionEventevt){// TODO add your handling code here:this.controller.btnAlterar();}privatevoidbtnNovoActionPerformed(java.awt.event.ActionEventevt){// TODO add your handling code here:this.controller.limparCampos();this.controller.bloquearCampos(false);this.funcao="salvar";}privatevoidbtnLimparActionPerformed(java.awt.event.ActionEventevt){// TODO add your handling code here:this.controller.limparCampos();}
Lucas_Camara1 like
Essa ideia está muito boa pra mim. A separação deixou a responsabilidade bem definida. Uma observação que tenho é (e não tem nada a ver com a view e a controller) vc não usar DefaultTableModel. Prefira criar sua propria model herdando de AbstractTableModel.