MVC – Model-View-Controller Exemplo – Cadastro de Funcionário VIEW Classe Janela package br.home.mvc.visao; import java.awt.FlowLayout; import javax.swing.JFrame; public class Janela extends JFrame { Janela() { setTitle("Cadastrar Funcionário"); setBounds(100,100,325,170); setLayout(new FlowLayout()); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); } } Classe Rotulo package br.home.mvc.visao; import java.awt.Dimension; import javax.swing.JLabel; public class Rotulo extends JLabel { public Rotulo(String arg0) { super(arg0); setPreferredSize(new Dimension(100,30)); } } Classe CaixaDeTexto package br.home.mvc.visao; import java.awt.Dimension; import javax.swing.JTextField; public class CaixaDeTexto extends JTextField { CaixaDeTexto() { setPreferredSize(new Dimension(205,30)); } } Classe Botao package br.home.mvc.visao; import java.awt.Dimension; import javax.swing.JButton; public class Botao extends JButton { public Botao(String rotulo) { super(rotulo); setPreferredSize(new Dimension(100,30)); } } Classe Cadastrar package br.home.mvc.visao; import java.awt.event.ActionListener; import java.util.Observer; import br.home.mvc.modelo.Funcionario; abstract class Cadastrar implements Observer { private Janela cadastro; private Rotulo codigoR, nomeR, salarioR; private CaixaDeTexto codigo, nome, salario; private Botao cadastrar, visualizar, sair; private Funcionario f; Cadastrar(Funcionario f) { cadastro = new Janela(); codigoR = new Rotulo("Código"); nomeR = new Rotulo("Nome"); salarioR = new Rotulo("Salário"); codigo = new CaixaDeTexto(); nome = new CaixaDeTexto(); salario = new CaixaDeTexto(); cadastrar = new Botao("Cadastrar"); visualizar = new Botao("Visualizar"); sair = new Botao("Sair"); cadastro.getContentPane().add(codigoR); cadastro.getContentPane().add(codigo); cadastro.getContentPane().add(nomeR); cadastro.getContentPane().add(nome); cadastro.getContentPane().add(salarioR); cadastro.getContentPane().add(salario); cadastro.getContentPane().add(cadastrar); cadastro.getContentPane().add(visualizar); cadastro.getContentPane().add(sair); this.f = f; f.addObserver(this); cadastro.setVisible(true); } public int getCodigo() { return Integer.valueOf(codigo.getText()); } public void setCodigo(int codigo) { this.codigo.setText(String.valueOf(codigo)); } public String getNome() { return nome.getText(); } public void setNome(String nome) { this.nome.setText(nome); } public double getSalario() { return Double.valueOf(salario.getText()).doubleValue(); } public void setSalario(double salario) { this.salario.setText(String.valueOf(salario)); } public void addCadastrarListener(ActionListener a) { cadastrar.addActionListener(a); } public void addVisualizarListener(ActionListener a) { visualizar.addActionListener(a); } public void addSairListener(ActionListener a) { sair.addActionListener(a); } protected Funcionario getF() { return f; } } MODEL Classe Funcionário package br.home.mvc.modelo; import java.util.Observable; public class Funcionario extends Observable { private int codigo; private String nome; private double salario; public int getCodigo() { return codigo; } public void setCodigo(int codigo) { this.codigo = codigo; setChanged(); notifyObservers(); } public String getNome() { return nome; } public void setNome(String nome) { this.nome = nome; setChanged(); notifyObservers(); } public double getSalario() { return salario; } public void setSalario(double salario) { this.salario = salario; setChanged(); notifyObservers(); } } CONTROLLER Classe ControleCadastrar package br.home.mvc.visao; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Observable; import javax.swing.JOptionPane; import br.home.mvc.modelo.Funcionario; public class ControleCadastrar extends Cadastrar { public ControleCadastrar(Funcionario f) { super(f); addCadastrarListener(new CadastrarListener()); addVisualizarListener(new VisualizarListener()); addSairListener(new SairListener()); } @Override public void update(Observable arg0, Object arg1) { JOptionPane.showMessageDialog(null,"Atualização realizada com sucesso!!!"); } class CadastrarListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { getF().setCodigo(getCodigo()); getF().setNome(getNome()); getF().setSalario(getSalario()); } } class VisualizarListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { JOptionPane.showMessageDialog(null,"Código: "+getF().getCodigo()+"\nNome: "+getF().getNome()+"\nSalário: "+getF().getSalario()); } } class SairListener implements ActionListener { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } } } APLICAÇÂO Classe FuncionarioApp package br.home.mvc.app; import br.home.mvc.modelo.Funcionario; import br.home.mvc.visao.ControleCadastrar; public class FuncionarioApp { public static void main(String[] args) { new ControleCadastrar(new Funcionario()); } }