Olá pessoal!
Estou fazendo um CRUD usando Swing e estou tendo problemas ao atualizar os dados da tabela.
Encontrei alguns exemplos na internet utilizando vetores e com vetores funciona perfeitamente. Porém quando utilizo banco de dados a tabela não é atualizada quando uma nova marca é inserida.
Seguem os códigos abaixo:
Primeiramente a janela, onde está a tabela. Essa janela foi construída com o editor visual do netbeans e além da tabela possui os botões de inserir, remover e atualizar.
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package br.com.view;
import br.com.controller.MarcaController;
import br.com.model.negocio.Marca;
import java.util.ArrayList;
/**
*
-
@author MEUS DOCUMENTOS
*/
public class MarcaGui extends javax.swing.JFrame {private MarcaTableModel model;
/**
-
Creates new form MarcaGui
*/
public MarcaGui() {
initComponents();
ArrayList lista = new ArrayList();
MarcaController a = new MarcaController();
lista = a.listarMarca();//cria o modelo de Produto
model = new MarcaTableModel(lista);//atribui o modelo à tabela
jTable1.setModel(model);
}
/**
-
This method is called from within the constructor to initialize the form.
-
WARNING: Do NOT modify this code. The content of this method is always
-
regenerated by the Form Editor.
*/
@SuppressWarnings(“unchecked”)
//
private void initComponents() {jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
txPesquisa = new javax.swing.JTextField();
botaoPesquisa = new javax.swing.JButton();
jScrollPane2 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
btInserir = new javax.swing.JButton();
btEditar = new javax.swing.JButton();
btRemover = new javax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
jPanel1.setBackground(new java.awt.Color(255, 255, 255));
jLabel1.setText(“Marcas”);
botaoPesquisa.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/view/imagens/pequisar.png"))); // NOI18N
botaoPesquisa.setText(“Pesquisar”);jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null},
{null, null},
{null, null},
{null, null}
},
new String [] {
“Id”, “Marca”
}
));
jScrollPane2.setViewportView(jTable1);btInserir.setText(“Inserir”);
btInserir.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
btInserirActionPerformed(evt);
}
});btEditar.setText(“Editar”);
btRemover.setText(“Remover”);
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addComponent(txPesquisa, javax.swing.GroupLayout.PREFERRED_SIZE, 240, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addComponent(botaoPesquisa))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(98, 98, 98)
.addComponent(jLabel1))
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 375, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(59, 59, 59)
.addComponent(btInserir)
.addGap(18, 18, 18)
.addComponent(btEditar)
.addGap(18, 18, 18)
.addComponent(btRemover)))
.addContainerGap(15, Short.MAX_VALUE))
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(txPesquisa, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addComponent(botaoPesquisa))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 142, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(btInserir)
.addComponent(btEditar)
.addComponent(btRemover))
.addContainerGap(43, Short.MAX_VALUE))
);javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
);pack();
}//
private void btInserirActionPerformed(java.awt.event.ActionEvent evt) {
InserirMarcaGui im = new InserirMarcaGui();
im.setVisible(true);
}// Variables declaration - do not modify
private javax.swing.JButton botaoPesquisa;
private javax.swing.JButton btEditar;
private javax.swing.JButton btInserir;
private javax.swing.JButton btRemover;
private javax.swing.JLabel jLabel1;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTable jTable1;
private javax.swing.JTextField txPesquisa;
// End of variables declaration
}
[/code] -
Abaixo segue o código da janela InserirMarca, também construída a partir do Netbeans. Gostaria que após a inserção de uma nova marca, essa janela fosse fechada e a tabela fosse atualizada. Já tentei construir um método atualizaTabela na marcaGui, porém não obtive sucesso.
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package br.com.view;
import br.com.controller.MarcaController;
import br.com.model.negocio.Marca;
/**
*
-
@author MEUS DOCUMENTOS
/
public class InserirMarcaGui extends javax.swing.JFrame {
MarcaTableModel mtb = new MarcaTableModel();
/*- Creates new form InserirMarcaGui
*/
public InserirMarcaGui() {
initComponents();
}
/**
-
This method is called from within the constructor to initialize the form.
-
WARNING: Do NOT modify this code. The content of this method is always
-
regenerated by the Form Editor.
*/
@SuppressWarnings(“unchecked”)
//
private void initComponents() {jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
txNome = new javax.swing.JTextField();
botaoLimpar = new javax.swing.JButton();
botaoSalvar = new javax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle(“Inserir Marca”);jPanel1.setBackground(new java.awt.Color(255, 255, 255));
jLabel1.setText(“Inserir Marca”);
jLabel2.setText(“Nome.:”);
botaoLimpar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/view/imagens/limpar.png"))); // NOI18N
botaoLimpar.setText(“Limpar”);botaoSalvar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/view/imagens/salvar.png"))); // NOI18N
botaoSalvar.setText(“Salvar”);
botaoSalvar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botaoSalvarActionPerformed(evt);
}
});javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(57, 57, 57)
.addComponent(jLabel1)
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(txNome))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addGap(0, 182, Short.MAX_VALUE)
.addComponent(botaoLimpar)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(botaoSalvar)))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(txNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(botaoLimpar)
.addComponent(botaoSalvar))
.addContainerGap(27, Short.MAX_VALUE))
);javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
);pack();
}//
private void botaoSalvarActionPerformed(java.awt.event.ActionEvent evt) {
Marca m = new Marca();
if (txNome.getText().length()>0){
m.setNome(txNome.getText());
MarcaController mc = new MarcaController();
mc.cadastrar(m);
mtb.inserir(m);}
}
// Variables declaration - do not modify
private javax.swing.JButton botaoLimpar;
private javax.swing.JButton botaoSalvar;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JTextField txNome;
// End of variables declaration
}
[/code] - Creates new form InserirMarcaGui
E por fim a classe MarcaTableModel que extende de AbstractTableModel.
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package br.com.view;
import br.com.controller.MarcaController;
import br.com.model.negocio.Marca;
/**
*
-
@author MEUS DOCUMENTOS
/
public class InserirMarcaGui extends javax.swing.JFrame {
MarcaTableModel mtb = new MarcaTableModel();
/*- Creates new form InserirMarcaGui
*/
public InserirMarcaGui() {
initComponents();
}
/**
-
This method is called from within the constructor to initialize the form.
-
WARNING: Do NOT modify this code. The content of this method is always
-
regenerated by the Form Editor.
*/
@SuppressWarnings(“unchecked”)
//
private void initComponents() {jPanel1 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jLabel2 = new javax.swing.JLabel();
txNome = new javax.swing.JTextField();
botaoLimpar = new javax.swing.JButton();
botaoSalvar = new javax.swing.JButton();setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
setTitle(“Inserir Marca”);jPanel1.setBackground(new java.awt.Color(255, 255, 255));
jLabel1.setText(“Inserir Marca”);
jLabel2.setText(“Nome.:”);
botaoLimpar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/view/imagens/limpar.png"))); // NOI18N
botaoLimpar.setText(“Limpar”);botaoSalvar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/br/com/view/imagens/salvar.png"))); // NOI18N
botaoSalvar.setText(“Salvar”);
botaoSalvar.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
botaoSalvarActionPerformed(evt);
}
});javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addGap(57, 57, 57)
.addComponent(jLabel1)
.addGap(0, 0, Short.MAX_VALUE))
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(txNome))
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addGap(0, 182, Short.MAX_VALUE)
.addComponent(botaoLimpar)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(botaoSalvar)))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1)
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jLabel2)
.addComponent(txNome, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(botaoLimpar)
.addComponent(botaoSalvar))
.addContainerGap(27, Short.MAX_VALUE))
);javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
);pack();
}//
private void botaoSalvarActionPerformed(java.awt.event.ActionEvent evt) {
Marca m = new Marca();
if (txNome.getText().length()>0){
m.setNome(txNome.getText());
MarcaController mc = new MarcaController();
mc.cadastrar(m);
mtb.inserir(m);}
}
// Variables declaration - do not modify
private javax.swing.JButton botaoLimpar;
private javax.swing.JButton botaoSalvar;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JPanel jPanel1;
private javax.swing.JTextField txNome;
// End of variables declaration
}
[/code] - Creates new form InserirMarcaGui
O que eu acho muito estranho é que usando vetor a tabela atualiza perfeitamente. O problema ocorre somente quando utilizo banco de dados.