Atualizar JTable

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]

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]

O que eu acho muito estranho é que usando vetor a tabela atualiza perfeitamente. O problema ocorre somente quando utilizo banco de dados.

O código do TableModel foi colado errado.
Seria bom também dizer o que exatamente não funciona.

Oi Vinny postei a dúvida em outro tópico que já aborda o assunto. Só não estou conseguindo excluir este.