Java Swing: Sistema usando o padrão MVC

Compartir:

Sistema Swing com MVC

Neste tutorial vou começar criando uma aplicação com Swing usando o padrão Model View Controller.
Qual será a função desta aplicação?
Este é um sistema com dados que poderão ser filtrados pelo usuário.
As ferramentas necessárias são:
  • Um IDE. Podem usar o IDE de sua preferência. Para este exercício, vou utilizar IntelliJ IDEA
  • Nosso Terminal ou prompt de comandos(opcional).

Começando

  • Primeiro criamos nossas pastas Model View Controller na pasta de nosso projeto:
  • mkdir Model View Controller
    view raw gistfile1.txt hosted with ❤ by GitHub

Pasta Model - Arquivos: Model.java e Constants.java 

  • Agora, vamos criar nosso primeiro arquivo, chamado "Model.java" dentro de nossa pasta Model:
  • cd Model
    touch Model.java
    view raw gistfile1.txt hosted with ❤ by GitHub
  • Vamos codificar?, bora lá:
  • /*
    * Primeiro vamos importar nossa implementação 'DefaultTableModel'
    */
    /*
    * Por que usar a class DefaultTableModel?
    * Vamos precisar dela para conseguir gerenciar um vetor bidirecional de objetos
    * para apresentação de resultados obtidos.
    * Vamos tentar mostrar na tela uma tabela(table)
    * com diferentes dados obtidos com diferentes métodos.
    */
    import javax.swing.table.DefaultTableModel;
    //Aplicando herança em nossa class Model com extends
    public class Model extends DefaultTableModel{
    //método construtor Model para aceder a nossos objetos que serão os dados
    //Data são os dados que estarão disponíveis e que estão armazenados
    //no contenedor DATA na class 'Constants' e o
    //TABLE_HEADER é o contenedor de nossos nomes de campos
    //tudo na class 'Constants'
    public Model(){
    //Estou chamando via construtor da subclasse (Model)
    //ao construtor da superclasse(DefaultTableModel):
    //DefaultTableModel(Object[][] data, Object[] columnNames), e
    //vou adicionar os parâmetros à inserir na tabela(DATA e TABLE_HEADER) que
    //permitem aceder ao método setDataVector para a construção da DefaultTableModel.
    super(Constants.DATA, Constants.TABLE_HEADER);
    }
    }
    view raw Model.java hosted with ❤ by GitHub
  • Vamos agora a criar nosso arquivo "Constants.java":
    touch Constants.java
    view raw Terminal hosted with ❤ by GitHub
  • Vamos codificar:
  • package com.miscapu.Model;
    public class Constants {
    //variável static pois vai ser compartilhada com os objetos e qualquer alteração
    //nesta variável vai ser refletida nos objetos
    //final: pois ela vai obrigatoriamente iniciada no momento da declaração.
    //Object: esta se referindo à matriz que contém os dados(TABLE_HEADER e DATA).
    //Em TABLE_HEADER o Object o índice("[]") representa as colunas
    //Em DATA o primeiro índice"[]" representa as linas e o segundo "[]" as colunas
    public static final Object[] TABLE_HEADER = {"Symbol","Company Name", "Price", "Change", "% Change", "Volume"};
    public static final Object[][] DATA = {
    { "BAC", "Bank of America Corporation", 15.98, 0.14, "+0.88%",
    32157250 },
    { "AAPL", "Apple Inc.", 126.57, -1.97, "-1.54%", 31367143 },
    { "ABBV", "AbbVie Inc.", 57.84, -2.43, "-4.03%", 30620258 },
    { "ECA", "Encana Corporation", 11.74, -0.53, "-4.33%", 27317436 },
    { "VALE", "Vale S.A.", 6.55, -0.33, "-4.80%", 19764400 },
    { "FB", "Facebook, Inc.", 81.53, 0.64, "+0.78%", 16909729 },
    { "PBR", "Petróleo Brasileiro S.A. - Petrobras", 6.05, -0.12,
    "-2.02%", 16181759 },
    { "NOK", "Nokia Corporation", 8.06, 0.01, "+0.12%", 13611860 },
    { "PCYC", "Pharmacyclics Inc.", 254.67, 24.19, "+10.50%", 13737834 },
    { "RAD", "Rite Aid Corporation", 7.87, -0.18, "-2.24%", 13606253 } };
    }
    view raw Constants.java hosted with ❤ by GitHub

Pasta View - Arquivo: View.java

  • É o momento de criar nosso arquivo "View.java":
    cd View
    touch View.java
    view raw Terminal hosted with ❤ by GitHub
  • Vamos fazer código:
    package com.miscapu.View;
    import com.miscapu.Controller.Controller;
    import com.miscapu.Model.Model;
    import java.awt.Dimension;
    import javax.sound.midi.ControllerEventListener;
    import javax.swing.BorderFactory;
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JSplitPane;
    import javax.swing.JTable;
    import javax.swing.JTextField;
    import javax.swing.border.TitledBorder;
    public class View {
    public View(){
    JTextField searchTermTextField = new JTextField(26);
    JButton filterButton = new JButton("Filter");
    JTable table = new JTable();
    //Criando Table Model
    Model model = new Model();
    table.setModel(model);
    //Criando Controller de busca
    Controller controller = new Controller(searchTermTextField, model);
    filterButton.addActionListener(controller);
    //Configurando o layout
    JPanel ctrlPane = new JPanel();
    ctrlPane.add(searchTermTextField);
    ctrlPane.add(filterButton);
    JScrollPane tableScrollPane = new JScrollPane(table);
    tableScrollPane.setPreferredSize(new Dimension(700, 182));
    tableScrollPane.setBorder(BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"Market Movers", TitledBorder.CENTER, TitledBorder.TOP));
    JSplitPane splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, ctrlPane, tableScrollPane);
    splitPane.setDividerLocation(35);
    splitPane.setEnabled(false);
    //Mostrar isso em uma janela com scroll e fazer janela ficar visível
    JFrame frame = new JFrame("Swing MVC Demo");
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.add(splitPane);
    frame.pack();
    frame.setLocationRelativeTo(null);
    frame.setVisible(true);
    }
    }
    view raw View.java hosted with ❤ by GitHub

Pasta Controller - Arquivo: Controller.java

  • É o momento de criar nosso arquivo "Controller.java":
    cd Controller
    touch Controller.java
    view raw Terminal hosted with ❤ by GitHub
  • Vamos ao código:
    package com.miscapu.Controller;
    /*
    * @Author MiSCapu
    */
    import com.miscapu.*;
    import com.miscapu.Model.Constants;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import javax.swing.JOptionPane;
    import javax.swing.JTextField;
    import javax.swing.table.DefaultTableModel;
    public class Controller implements ActionListener {
    private JTextField searchTermTextField = new JTextField(26);
    private DefaultTableModel model;
    public Controller(JTextField searchTermTextField, DefaultTableModel model){
    super();
    this.searchTermTextField = searchTermTextField;
    this.model = model;
    }
    @Override
    public void actionPerformed(ActionEvent e){
    String searchTerm = searchTermTextField.getText();
    if (searchTerm!=null && !"".equals(searchTerm)){
    Object[][] newData = new Object[Constants.DATA.length][];
    int idx = 0;
    for (Object[] o: Constants.DATA){
    if ("*".equals(searchTerm.trim())) {
    newData[idx++] = o;
    }else {
    if (String.valueOf(o[0]).startsWith(searchTerm.toUpperCase().trim())) {
    newData[idx++] = o;
    }
    }
    }
    model.setDataVector(newData, Constants.TABLE_HEADER);
    }else {
    JOptionPane.showMessageDialog(null,"Search term is empty", "Error", JOptionPane.ERROR_MESSAGE);
    }
    }
    }
    view raw Controller.java hosted with ❤ by GitHub

Executando Programa - Arquivo: SwingMVCDemo.java

  • Agora para finalizar, vamos executar nosso programa,
  • Para isso vamos cirar nossa class SwingMVCDemo.java em nosso diretório principal:
    touch SwingMVCDemo.java
    view raw Terminal hosted with ❤ by GitHub
  • Agora vamos fazer nosso código final neste arquivo:
    package com.miscapu;
    import com.miscapu.View.View;
    import javax.swing.SwingUtilities;
    /*
    * @Author MiSCapu
    *
    */
    public class SwingMVCDemo {
    public static void main(String[] args){
    SwingUtilities.invokeLater(() -> {
    try {
    createAndShowGui();
    }catch (Exception e) {
    e.printStackTrace();
    }
    });
    }
    private static void createAndShowGui() {
    new View();
    }
    }

Espero ter sido claro, qualquer dúvida pode fazer qualquer comentário!. Obrigado por ter lido esta postagem! 
      Compartir:
      Localización Porangaba, SP, 18260-000, Brasil

      Java

      MVC

      swing

      Déjenos su Comentário:

      0 commentários:

      También puede leer

      PHP: Tutorial CodeIgniter - Configuración - Parte 5

      Remover index.php de la barra de direcciones usando .htaccessCómo hacerlo...Primer Paso: Usted puede Crear o abrir un ar

      Miguel Gaspar