Problemas ao visualizar dados em JTable

Construi uma Jtable para visualizar os dados de uma base acess. mas ocorre o seguinte erro.
Tenho 5 registros na base mas na ora de visualizar mostra somente o último.
A clase para criar os nós eu já peguei pronta como exemplo.
Segue fontes:
======Jtable ===========
mport java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import javax.swing.JButton;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.ScrollPaneConstants;

public class FrameC extends javax.swing.JFrame {
public JButton bt_cancelar = new JButton(“Fechar”);
public JButton bt_eliminar = new JButton(“Eliminar”);
private javax.swing.JPanel bAdd;
private javax.swing.JPanel pnTable;
private javax.swing.JScrollPane scrollTable;
private javax.swing.JTable table;
String url = “jdbcdbc:dbsample”;
Connection con;
Statement stmt;

private static final long serialVersionUID = 1L;

public FrameC() {
try {
initComponents();
} catch(Exception ex) {
ex.printStackTrace();
}
}

private JTable initComponents() throws Exception {
bAdd = new javax.swing.JPanel();
pnTable = new javax.swing.JPanel();
scrollTable = new javax.swing.JScrollPane();
table = new javax.swing.JTable();

setTitle(“Consulta Funcionários”);
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(java.awt.event.WindowEvent evt) {

}
});

bAdd.setLayout(null);

pnTable.setLayout(new java.awt.GridLayout(1, 0));

pnTable.setBorder(new javax.swing.border.TitledBorder(“Funcionários”));

try {
Class.forName(“sun.jdbc.odbc.JdbcOdbcDriver”);

}catch (ClassNotFoundException e) {
System.err.print("ClassNotFoundException: ");
System.err.print(e.getMessage());

}

try {
con = DriverManager.getConnection(url, “user”, “password”);
stmt = con.createStatement();

}catch(SQLException ex){
System.err.print("SQLException: " + ex.getMessage());
}

ResultSet uprs = stmt.executeQuery(“SELECT * FROM Funcionario”);
while (uprs.next()){
String cod = uprs.getString(“COD_FUNC”);
String nome = uprs.getString(“NOME_FUNC”);
String email = uprs.getString(“EMAIL”);
String fone = uprs.getString(“NUM_FONE”);

ArrayList dados = new ArrayList();
String[] colunas = new String[] { “Código”,“Nome”,“E-Mail”,“Telefone” };
boolean [] edicao = {false, true};

// Alimenta as linhas de dados
dados.add(new String[] {cod,nome,email,fone});
SimpleTableModel modelo = new SimpleTableModel(dados, colunas, edicao);
JTable table = new JTable(modelo);
table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
scrollTable.setViewportView(table);
scrollTable.setVerticalScrollBarPolicy(
ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);

}

pnTable.add(scrollTable);
bAdd.add(pnTable);
pnTable.setBounds(10, 10, 370, 230);
bAdd.add(bt_cancelar);
bt_cancelar.setBounds(380, 215, 80, 23);
getContentPane().add(bAdd, java.awt.BorderLayout.CENTER);
bAdd.add(bt_eliminar);
bt_eliminar.setBounds(380, 180, 80, 23);

java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
setBounds((screenSize.width-474)/2, (screenSize.height-283)/2, 474, 283);

bt_cancelar.addActionListener(new EventosControlFrameC(this));
return table;

}

}

===== fonte auxiliar para criar as linhas de dados=====
mport java.util.ArrayList;
import java.util.Iterator;

import javax.swing.table.AbstractTableModel;

/*

  • Created on 25/05/2004
  • To change the template for this generated file go to
  • Window>Preferences>Java>Code Generation>Code and Comments
    */

/**


  • Créditos : Bruno R. Lima

  • Construção: 25/05/2004
  • Classe que extende a AbstractTableModel.
  • Faz uma implementação do modelo de tabela para uma JTable
  • @author Bruno R. Lima
    */
    public class SimpleTableModel extends AbstractTableModel{

private ArrayList linhas = null;
private String [] colunas = null;
private boolean [] colsEdicao;

/**

  • Contrutor para a classe, recebendo os dados a serem exibidos
  • e as colunas que devem ser criadas.
  • @param dados
  • @param colunas
    */
    public SimpleTableModel(ArrayList dados, String[] colunas, boolean [] edicao){
    setLinhas(dados);
    setColunas(colunas);
    colsEdicao = edicao;
    }

/**

  • Retorna o numero de colunas no modelo
  • @see javax.swing.table.TableModel#getColumnCount()
    */
    public int getColumnCount() {return getColunas().length;}

/**

  • Retorna o numero de linhas existentes no modelo
  • @see javax.swing.table.TableModel#getRowCount()
    */
    public int getRowCount() {return getLinhas().size();}

/**

  • Obtem o valor na linha e coluna
  • @see javax.swing.table.TableModel#getValueAt(int, int)
    */
    public Object getValueAt(int rowIndex, int columnIndex) {
    // Obtem a linha, que é uma String []
    String [] linha = (String [])getLinhas().get(rowIndex);
    // Retorna o objeto que esta na coluna
    return linha[columnIndex];
    }

public String[] getColunas() {return colunas;}
public ArrayList getLinhas() {return linhas;}
public void setColunas(String[] strings) {colunas = strings;}
public void setLinhas(ArrayList list) {linhas = list;}

/**

  • Seta o valor na linha e coluna
  • @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int)
    /
    public void setValueAt(Object value, int row, int col){
    // Obtem a linha, que é uma String []
    String [] linha = (String [])getLinhas().get(row);
    // Altera o conteudo no indice da coluna passado
    linha[col] = (String)value;
    // dispara o evento de celula alterada
    fireTableCellUpdated(row,col);
    }
    /
    *
  • Retorna se a celula pode ser editada
  • @see javax.swing.table.TableModel#isCellEditable(int, int)
    */
    public boolean isCellEditable(int row, int col){
    return colsEdicao[col];
    }

/**

  • Adiciona o array na linha
    */
    public void addRow( String [] dadosLinha){
    getLinhas().add(dadosLinha);
    // Informa a jtable de que houve linhas incluidas no modelo
    // COmo adicionamos no final, pegamos o tamanho total do modelo
    // menos 1 para obter a linha incluida.
    int linha = getLinhas().size()-1;
    fireTableRowsInserted(linha,linha);
    return;
    }

/**

  • Remove a linha pelo indice informado
  • @param row
    */
    public void removeRow(int row){
    getLinhas().remove(0);
    // informa a jtable que houve dados deletados passando a
    // linha reovida
    fireTableRowsDeleted(row,row);
    }

/**

  • Remove a linha pelo valor da coluna informada
  • @param val
  • @param col
  • @return
    */
    public boolean removeRow(String val, int col){
    // obtem o iterator
    Iterator i = getLinhas().iterator();
    int linha = 0;
    // Faz um looping em cima das linhas
    while(i.hasNext()){
    // Obtem as colunas da linha atual
    String[] linhaCorrente = (String[])i.next();
    linha++;
    // compara o conteudo String da linha atual na coluna desejada
    // com o valor informado
    if( linhaCorrente[col].equals(val) ){
    getLinhas().remove(linha);
    // informa a jtable que houve dados deletados passando a
    // linha removida
    fireTableRowsDeleted(linha,linha);
    return true;
    }
    }
    // Nao encontrou nada
    return false;
    }

/**

  • Retorna o nome da coluna.
  • @see javax.swing.table.TableModel#getColumnName(int)
    */
    public String getColumnName(int col){
    return getColunas()[col];
    }

}