Java - Criando uma aplicação em 3 camadas (MVC)

O passo a passo para a criação de uma aplicação usando Java, com Banco de Dados (BD) chamado H2 na estrutura MVC (Modelo, Visão e Controle)....

O passo a passo para a criação de uma aplicação usando Java, com Banco de Dados (BD) chamado H2 na estrutura MVC (Modelo, Visão e Controle).
Será um exemplo com uma única classe sendo armazenada no BD.


Para os códigos que seguem abaixo, em todas as classes deve-se incluir o package correto e adicionar os imports necessários. Observe a divisão abaixo:
 - gui (Visão)
- LoginGUI
- ApiculturaGUI
- ClienteGUI
- controller (Controle)
- ApiculturaController
- IncluirClienteController
- persistência (Modelo)
- ClienteDAO
- FactoryConnection
- dominio (Modelo)
- Cliente



A primeira classe contém o famoso psvm (public static void main), que inicia a execução da aplicação:

public class Apicultura {
public static void main(String[] args) {
ApiculturaController app = new ApiculturaController();
}
}



A classe ApiculturaController.java controla a janela de Login e a que contém o Menu.
Se o usuário acertar a senha, que é única, a janela com menu será apresentada, caso contrário a aplicação é finalizada.
São instanciadas as classes com a interface gráfica e aqui são tratados os eventos.

public class ApiculturaController {
private ApiculturaGUI gui = null;
private LoginGUI guiLog = null;

public ApiculturaController() {
guiLog = new LoginGUI();
guiLog.adicionarOuvinteLogin (new OuvinteLogin());
}

class OuvinteLogin implements ActionListener {
public void actionPerformed (ActionEvent ev){
if (ev.getActionCommand() == "OK") {
String senha = String.valueOf(guiLog.pfSenha.getPassword());
if (senha.compareTo("SENHA")==0) {
guiLog.dispose(); // fecha a janela de login
gui = new ApiculturaGUI();
gui.adicionarOuvinte(new OuvinteIncluir());
}
else {
JOptionPane.showMessageDialog(null, "Senha Inválida!");
System.exit(0);
}
}
else System.exit(0);
}
}

class OuvinteIncluir implements ActionListener {
public void actionPerformed (ActionEvent ev) {
Object fonte = ev.getSource();
if (ev.getSource() instanceof JMenuItem) {
if (fonte == gui.mcSair) {
System.exit (0);
}
else
if (fonte == gui.mcCadastro) {
IncluirClienteController clienteController =
new IncluirClienteController();
gui.desktop.add(clienteController.guiCli);
}
}
}
}
}



A classe LoginGUI.java deve conter os componentes em seu método construtor e a adição dos eventos, que são tratados na classe de controle (ApiculturaController.java).

public class LoginGUI extends JFrame {
// declarar os componentes aqui como public

public LoginGUI() {
// tratar a parte gráfica aqui
}

public void adicionarOuvinteLogin (ActionListener ouvinte) {
this.btOK.addActionListener(ouvinte);
this.btCancelar.addActionListener(ouvinte);
}
}

Um exemplo para a interface gráfica de Login é a seguinte:

Login


A classe ApiculturaGUI.java é a que contém o menu, usando as classes DesktopPane e JInternalFrame. Observe a implementação:

public class ApiculturaGUI extends JFrame {
public JDesktopPane desktop;
public JMenuBar barraDeMenu;
public JMenuItem mcCadastro, mpCadastro, mcSair, miSobre;

public ApiculturaGUI() {
this.setTitle("Sistema de Controle de Produção Apícula");
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

barraDeMenu = criaMenu();
this.setJMenuBar(barraDeMenu);

desktop = new JDesktopPane();
this.setContentPane(desktop);
this.setVisible(true);
}

public JMenuBar criaMenu() {
// crie seu menu com os componentes JMenu, JMenuBar e JMenuItem
}

public void adicionarOuvinte (ActionListener ouvinte) {
this.mcCadastro.addActionListener(ouvinte);
this.mcSair.addActionListener(ouvinte);
}
}

Como aconteceu na classe LoginGUI.java, a classe ApiculturaGUI deve conter os componentes para a criação do menu em seu método construtor e a adição dos eventos, que são tratados na classe de controle (ApiculturaController.java).

Veja como fica o Front-end da aplicação:

Menu
Observe que o JPanel contém uma imagem de fundo. Para maiores detalhes, acesse a explicação clicando aqui.


A próxima classe é a IncluirClienteController.java que chama a interface gráfica para a classe Cliente e trata os eventos que serão adicionados pela classe ClienteGUI.java.

public class IncluirClienteController {
public ClienteGUI guiCli;

public IncluirClienteController() {
guiCli = new ClienteGUI();

guiCli.adicionarOuvinteCliente1 (new OuvinteIncluirCliente1());
}

class OuvinteIncluirCliente1 implements ActionListener {
public void actionPerformed(ActionEvent ev){
Object fonte = ev.getSource();
if (fonte == guiCli.bSaiCli)
guiCli.dispose();
else if (fonte == guiCli.bLimCli)
guiCli.limparCampos();
else if (fonte == guiCli.bExcCli) {
ClienteDAO clienteDAO = new ClienteDAO();
clienteDAO.excluirCliente(guiCli.tfcodcli.getText());
guiCli.limparCampos();
}
else if (fonte == guiCli.bConCli) {
ClienteDAO clienteDAO = new ClienteDAO();
Cliente cliente = clienteDAO.consultarCliente();
if (cliente != null)
mostrarCliente(cliente);
}
else if (fonte == guiCli.bIncCli) {
ClienteDAO clienteDAO = new ClienteDAO();
Cliente cliente = obterCliente();
clienteDAO.incluirCliente(cliente);
guiCli.limparCampos();
}
else if (fonte == guiCli.bAltCli)
ClienteDAO clienteDAO = new ClienteDAO();
Cliente cliente = obterCliente();
clienteDAO.alterarCliente(cliente);
}
}
}
}

public Cliente obterCliente(){
Cliente cliente = new Cliente();
// Aqui deve-se obter todos os dados contidos nos componentes
// e preencher o objeto cliente.
// Exemplo: cliente.setNomCli(guiCli.tfnomcli.getText());
return cliente;
}

public void mostrarCliente(Cliente cliente){
// Aqui deve-se obter todos os dados contidos no objeto cliente
// e preencher os componentes da interface gráfica
// Exemplo: guiCli.tfnomcli.setText(cliente.getNomCli());
}
}



A classe ClienteGUI.java contém apresentação da interface gráfica para tratar os dados do Cliente.
Veja o exemplo:

Interface_Cliente
Veja o trecho do código:

public class ClienteGUI extends JInternalFrame {
// declarar os componentes da interface

public ClienteGUI() {
// criar a interface gráfica
}

public void adicionarOuvinteCliente1 (ActionListener ouvinte) {
// adicionar os ouvintes aos botões
// Ex.: this.bIncCli.addActionListener(ouvinte);
}

public void limparCampos() {
// comandos para limpar os componentes
}
}

O menu está no JDesktopPane e as demais janelas serão JInternalFrame.


A classe que controla Cliente (IncluirClienteController.java) também precisa da classe Cliente.java que tem a definição dos atributos e dos métodos acessores (get) e modificadores (set).
Veja parte do código:

public class Cliente {
// declare todos os atributos como private
private int codcli;
private String nomcli;

public Cliente() {
super();
}

public Cliente (int codcli, String nomcli){
super();
this.codcli = codcli;
this.nomcli = nomcli;
}

public int getCodCli(){
return this.codcli;
}

public String getNomCli(){
return this.nomcli;
}

public void setCodCli(int codcli) {
this.codcli = codcli;
}

public void setNomCli(String nomcli) {
this.nomcli = nomcli;
}
}



A classe ClienteDAO.java (Data Access Object) trata das rotinas de inclusão, exclusão, alteração e consulta, ou seja, trabalha diretamente com a fonte de dados (o BD). Todos os seus métodos realizarão a conexão com o Banco de Dados, sendo assim, precisam instanciar um objeto da classe FactoryConnection.java.
Ex.: Connection con = FactoryConnection.getConnection();

public class ClienteDAO {
public void incluirCliente(Cliente cliente) {
// tratar inclusão
}

public Cliente consultarCliente() {
// tratar consulta
return cliente;
}

public void alterarCliente(Cliente cliente) {
// tratar alteração
}

public void excluirCliente(String strcod) {
// tratar exclusão
}
}

Para maiores detalhes, clique aqui e acesse o Fórum Programação Java - Dicas que contém detalhes da classe ClienteDAO.


A classe FactoryConnection apresenta a conexão com o Banco de Dados, que neste exemplo será o H2.

public class FactoryConnection {
public static Connection getConnection(){
Connection con = null;
try {
Class.forName("org.h2.Driver");
String url = "jdbc:h2:tcp://localhost:9092/C:/DB/Banco";
String user = "admin";
String password = "senha";
con = DriverManager.getConnection(url, user, password);
} catch (Exception e){
e.printStackTrace();
}
return con;
}
}

Trabalhando dessa forma, suas classes ficam menores e bem dividas por assunto!
O códigos foram didaticamente apresentados! Portanto, use sua criatividade e melhore-os!


Links para pesquisa:
Padrões de Projeto : O modelo MVC

Comentários

BLOGGER: 23
Loading...
Nome

A divulgar Abelha acessibilidade acessório Acidente Acidentes Acústica Adágios Adestramento Administração adulto Aerodinâmica Aeronáutica África Agência Brasil Agropecuária AIDS Alcoolismo Alemanha Alerta Algoritmo Alimento Alzheimer Amazon Amazônia Análise Combinatória Anatomia Android Animação Animais de Estimação Animal Antropologia apagão Apicultura Apobec App Apple Apresentação aquário Argentina Arqueologia arquitetura Arte Astrobiologia Astronomia Ativismo Áudio Audio FX Áustria Autismo Auto-ajuda Automobilismo Automóvel aventura Aviação Aviônica Bahia Balonismo Banco de Dados Beber e Dirigir biblioteconomia Bicicleta Biografia Biologia Biologia Marinha bioquímica Biotecnologia Blog Blogger Boato Bomba borderô de desconto Botânica Brasil Brasília BRIC Browser Bugs CAD Calor Câmera lenta Campanha câncer cardiologia carreira Casemods Caso Isabella Nardoni Caso Snowden Celebridades celular Células-Tronco Cérebro Charge China Cibercultura Ciclovia Cidadania Ciência Cinema Clip Cliparts Cloud computing Comédia competência Complemento de dois Comportamento Computação Computação em grade Computação forense Computação Gráfica Computação Móvel Comunicação e Marketing Concurso Concurso Cultural de Natal Concursos Público Concursos Públicos Conectômica Conspiração Consumidor Consumismo contabilidade Contos Copa do Mundo Cordel Coreia do Norte Coreia do Sul Corpo Coruja cosmética cosmologia Criança Crime Crime Digital crise crise econômica crônica crônicas Cronologia CSS Cuba Culinária Cultura Curiosidades custos fixo custos variáveis Dança DAO Darwin Decoração demência Demografia Denúncia Dermatologia Desastre Natural Descoberta desconto duplicatas Desenho instrucional Desenvolvimento de jogos Design Dia das Mães Dia do professor diabetes Dica Dicas Didática Dieta diplomacia Direito Direito Eleitoral Direito Internacional Direito Tributário Direitos Humanos Disney Distrito Federal Documentário Doutorado download Drogas e-Book e-governo Ecologia economia Editoração Eletrônica Educação Educação a Distância educação física Educação sexual Efeitos Sonoros Egiptologia Eleições Eleições 2014 Eletricidade eletrônica empreendedorismo enciclopédia endocrinologia Enem Energia Energia Alternativa Energia Nuclear Engenharia Engenharia Civil Engenharia de materiais Engenharia de Software Engenharia Genética Engenharia Mecânica Enretenimento Ensino a Distância Ensino Superior Entomologia Entretenimento Entrevista Epidemiologia Equador Escândalo Escritório Espaço Espanha Espanhol Espeleologia Espetáculo Espionagem Esporte Estação Estágio Estatísticas estrutura de dados Ética EUA Evento Evolução Exercícios físicos Exobiologia experiência fábulas Facebook Farmacologia Favo featured Feminismo Férias Ferramentas FIFA Filantropia Filmes Filosofia Firefox Física Física Quântica Fisiologia Fisioterapia Flagrante Flamengo Folclore Fome Fonoaudiologia Fotografia Fotos em 360 graus França Francês frases Fraude Freeware Futebol Futurologia gadget Gafe Gastroenterologia Gastronomia Geek Genética Geofísica Geografia Geologia Geometria geopolítica Geriatria Gestão de Configuração Gestão de Projetos Gestão do conhecimento Ginecologia Glass Google Governo GPS Gradiente gramática Gravidez Grécia Grécia Antiga Guerra Guinness H2 Haiti hardware História HIV homenagem Horologia HPV HTML Humor Humor Negro IBM ICIJ Idioma IHC ilo ilusão ilusão de óptica ilusão de ótica ilusionismo Imagem 3D Imagens Imagine Cup Império Romano Imprensa Impressora 3D Incêndio Inclusão digital Índia Índios Infectologia Infográfico Informática Inglaterra Inglês Inovação Inteligência Artificial interativo Interface Interface Homem-Computador Interfaces Hápticas Internacional Internacionalização da Amazônia Internet Inundação Invenção Inventos iPad IPEA iphone Irã Iraque Israel Japão Java Java. jogos Jogos educativos Jogos Olímpicos Jornalismo Justiça Kinect Le Monde Diplomatique Brasil Letras Lexicografia Liderança Life Hacking Linguística Literatura Livro Lógica Logística Lua Maçonaria Malásia Malvinas Malware Mapa Mapas Marte Mastologia Matemática Matemática Financeira maternidade Mecânica Mecânica dos Fluidos Mecatrônica Medicina Medicina Esportiva Medicina Veterinária Meio Ambiente Mel melanoma Memória memorização Mente Mercado de Trabalho mercosul Mestrado meteorologia Metodologia Científica México Microbiologia Microsoft Mídia Social Militar Mineralogia Mistério MIT Mitologia Mobilidade Mobilidade Urbana MonaVie Montanhismo Moodle Mossad Motivação MSF Mudança Climática Mulher Multimídia museu Música MVC Nanotecnologia Nasa Natação Natal Natureza Negócios Neurociência Neurologia Nordeste Noruega notícias Novidades Novo Enem Números Nutrição Obama Obesidade Observatório da Imprensa Obstetrícia Oceanografia odontologia Offshore Leaks oftalmologia Olimpíadas oncologia ONU Opinião Óptica Oracle Oriente Médio Orkut Ornitologia ortografia Ortopedia ótica Otorrinolaringologia Paginadores paleontologia Paquistão Pará Paraguai parkinson Passeio virtual Patinação Pediatria Pensamentos performance Periférico Pesca Pesquisa Petição Petrobrás Petróleo Photoshop Pirataria planilha de custo Playstation 3 Plebiscito Pneumologia Podcast Poesia Poítica Política Portugal português Pós-graduação prazo médio Pré-sal Prêmio Nobel primatologia privacidade produtividade professor Hamilton Alves Programa Gratuito Programação Projeto Truco Promoção Propaganda Psicanálise Psicologia Psicologia Animal Psiquiatria Pública publicidade Publieditorial Quadrinhos Quads Qualidade Qualidade de Vida quimica química realidade aumentada realidade diminuída Realidade Virtual Reconhecimento de imagem Reconhecimento de voz Recorde Redação redes Referência Referendo Reforma Política Relacionamento Relações Internacionais Religião Responsabilidade Social Retrospectiva Rio 2016 Rio Grande do Norte Rio Grande do Sul robótica Roda Viva Roma roteiro RSA Rússia Samsung Sanitarismo Santa Catarina São Paulo saúde Savant Segunda Guerra Mundial Segurança Segurança da Informação Seleção Natural serviço Serviço Online Sexologia sexualidade Show SIGGRAPH Simulação Sismologia Sistema operacional Sistemas de Numeração Sites de Busca Sociedade Sociologia Software Software Livre Sol Sono Sony SOPA Suécia Sugestão de presentes Sun supercomputadores Sustentabilidade Tabagismo Talento precoce taxa de juros efetiva taxa de juros nominal Taxas Equivalentes Taxidermia Teatro Técnicas de Estudo Tecnologia Tecnologia da Informação TED TedMed TEDx Rio+20 TEDxAmazônia TEDxAsaSul Telefonia Televisão Temas Tempo Tendências Teologia teoria das supercordas Terremoto Terrorismo Testes Tipologia Tomada de Decisão tradução Trânsito transporte tributo Trigonometria Tubarão Turismo Tutorial Twitter UFG ufologia UFRJ universidade Urbanismo Urologia USP Utilidade Pública Utilitário Vale Vaticano Ventriloquismo Verão vestibular Vestimenta Vida Digital Vida Moderna Vida Selvagem Vídeo Videogame Vídeos Vídeos 360 Violência Vírus Visão Computacional Vôlei Vulcanologia Watergate Política Web 2.0 Web Application Web Semântica Web Seminar webdesign Webinar widget WikiLeaks Wikipedia Windows Xadrez YouTube Zoologia
false
ltr
item
Brasil Acadêmico Draft: Java - Criando uma aplicação em 3 camadas (MVC)
Java - Criando uma aplicação em 3 camadas (MVC)
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeQejn6PEMKsFDkj7_I4yELCKNgKCtUB7XtWNrCjuOhewI_X_J2w8AQ5z6j-Xw7glsUgVRJ5W3CAjDWoHiQU7ZRBheBwvcKQB8OCBwyIuJZ5M_o9iFkUi58NcigUGeV0PLS5IuwL87P17t/s320/mvc.jpg
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeQejn6PEMKsFDkj7_I4yELCKNgKCtUB7XtWNrCjuOhewI_X_J2w8AQ5z6j-Xw7glsUgVRJ5W3CAjDWoHiQU7ZRBheBwvcKQB8OCBwyIuJZ5M_o9iFkUi58NcigUGeV0PLS5IuwL87P17t/s72-c/mvc.jpg
Brasil Acadêmico Draft
https://draftbracad.blogspot.com/2008/11/java-criando-uma-aplicacao-em-3-camadas_9.html
https://draftbracad.blogspot.com/
http://draftbracad.blogspot.com/
http://draftbracad.blogspot.com/2008/11/java-criando-uma-aplicacao-em-3-camadas_9.html
true
7742307559183522523
UTF-8
Nenhuma artigo encontrado. VER TODOS Leia mais Responder Cancelar resposta Apagar Por Início PÁGINAS POSTS Ver Todos Indicado para você CATEGORIA ARQUIVO BUSCA TODOS ARTIGOS Nenhum artigo corresponde ao critério procurado Ir para Início Domingo Segunda Terça Quarta Quinta Sexta Sábado Dom Seg Ter Qua Qui Sex Sáb Janeiro Fevereiro Março Abril Maio Junho Julho Agosto Setembro Outubro Novembro Dezembro Jan Fev Mar Abr Maio Jun Jul Ago Set Out Nov Dez agora 1 minuto atrás $$1$$ minutes ago 1 hora atrás $$1$$ hours ago Ontem $$1$$ days ago $$1$$ weeks ago mais de 5 semanas atrás Seguidores Seguir Este conteúdo é PREMIUM Por favor, compartilhe para liberar Copiar todo o código Selecionar todo o código Todos os códigos foram copiados para o clipboard Can not copy the codes / texts, please press [CTRL]+[C] (or CMD+C with Mac) to copy