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:
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:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
mkdir Model View Controller |
Pasta Model - Arquivos: Model.java e Constants.java
- Agora, vamos criar nosso primeiro arquivo, chamado "Model.java" dentro de nossa pasta Model:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cd Model | |
touch Model.java |
- Vamos codificar?, bora lá:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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); | |
} | |
} |
- Vamos agora a criar nosso arquivo "Constants.java": This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
touch Constants.java - Vamos codificar:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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 } }; | |
} |
Pasta View - Arquivo: View.java
- É o momento de criar nosso arquivo "View.java": This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
cd View touch View.java - Vamos fazer código: This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
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); } }
Pasta Controller - Arquivo: Controller.java
- É o momento de criar nosso arquivo "Controller.java": This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
cd Controller touch Controller.java - Vamos ao código: This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
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); } } }
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:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
touch SwingMVCDemo.java
- Agora vamos fazer nosso código final neste arquivo:
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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();
}
}
- Agora para finalizar, vamos executar nosso programa,
- Para isso vamos cirar nossa class SwingMVCDemo.java em nosso diretório principal:This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
touch SwingMVCDemo.java
- Agora vamos fazer nosso código final neste arquivo:This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
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!
Déjenos su Comentário:
0 commentários: