CHECKBOX em JTable só retorna FALSE

Tenho uma JTable com model de Abstract Table e está funcionando perfeitamente, nela tenho algumas colunas e eu populo essa tabela com dados vindo do bd, cada linha tem um checkbox, permitindo que o usuário selecione quantas linhas quiser, e quando vou pegar as linhas que estão selecionadas sempre retorna false, estando marcado ou não. Estou usando getValueAt(0, 0) para receber o valor do checkbox, já tentei também utilizar o getSelectedRows() mas não funcionou também…

abstract table:

[code]public class CorreioTableModel extends AbstractTableModel
{
private static final int SELECIONADO = 0;
private static final int TRANSPORTADORA = 1;
private static final int BASE = 2;
private static final int CONTRATO = 3;
private static final int LOTE = 4;
private static final int NF = 5;
private static final int VALOR = 6;
private static final int NUMPROVISAO = 7;
private static final int VALORPROVISAO = 8;

private List<Correio> linhas;
private String[] colunas = new String[] {"", "Transportadora", "Base", "Contrato", "Lote", "NF", "Valor", "Nº Provisão", "Valor Provisão" };

public CorreioTableModel() 
{
    linhas = new ArrayList<Correio>();
}

public CorreioTableModel(List<Correio> tabelaCorreio) 
{
    linhas = new ArrayList<Correio>(tabelaCorreio);
}

@Override
public int getRowCount() 
{        
    return linhas.size();
}

@Override
public int getColumnCount() 
{
    return colunas.length;
}

@Override
public String getColumnName(int columnIndex) 
{
    return colunas[columnIndex];
};

@Override
public Class<?> getColumnClass(int columnIndex) 
{
    switch (columnIndex) 
    {
        case SELECIONADO:
            return Boolean.class;
        case TRANSPORTADORA:
            return String.class;
        case BASE:
            return String.class;
        case CONTRATO:
            return String.class;
        case LOTE:
            return String.class;
        case NF:
            return int.class;
        case VALOR:
            return BigDecimal.class;
        case NUMPROVISAO:
            return int.class;
        case VALORPROVISAO:
            return BigDecimal.class;
        default:
        // Não deve ocorrer, pois só existem 9 colunas
        throw new IndexOutOfBoundsException("columnIndex out of bounds");
    }
}

@Override
public boolean isCellEditable(int rowIndex, int columnIndex) 
{
    // apenas o campo "SELECIONADO" será editável           
    return (columnIndex == SELECIONADO);
}             

@Override
public Object getValueAt(int rowIndex, int columnIndex) 
{
    // Pega referente a linha especificada.
    Correio correio = linhas.get(rowIndex);
    switch (columnIndex) 
    {
        case SELECIONADO:                
            return correio.isSelecionado();                
        case TRANSPORTADORA:
            return correio.getTransportadora();
        case BASE:
            return correio.getBase();
        case CONTRATO:
            return correio.getContrato();
        case LOTE:
            return correio.getLote();
        case NF:
            return correio.getNF();
        case VALOR:
            return correio.getValor();
        case NUMPROVISAO:
            return correio.getNumProvisao(); 
        case VALORPROVISAO:
            return correio.getValorProvisao();                 
        default:
        // Não deve ocorrer, pois só existem 9 colunas
        throw new IndexOutOfBoundsException("columnIndex out of bounds");
    }
}                

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) 
{
    // Pega referente a linha especificada.
    Correio correio = linhas.get(rowIndex);
    switch (columnIndex) 
    {
        case SELECIONADO:
            correio.setSelecionado((Boolean) aValue);                
            break;
        case TRANSPORTADORA:
            correio.setTransportadora((String) aValue);
            break;
        case BASE:
            correio.setBase((String) aValue);
            break;
        case CONTRATO:
            correio.setContrato((String) aValue);
            break;
        case LOTE:
            correio.setLote((String) aValue);
            break;
        case NF:
            correio.setNF((int) aValue);
            break;
        case VALOR:
            correio.setValor((BigDecimal) aValue);
            break;
        case NUMPROVISAO:
            correio.setNumProvisao((int) aValue);
            break;
        case VALORPROVISAO:
            correio.setValorProvisao((BigDecimal) aValue);
            break;
        default:
        // Não deve ocorrer, pois só existem 9 colunas
        throw new IndexOutOfBoundsException("columnIndex out of bounds");
    }
    fireTableCellUpdated(rowIndex, columnIndex); // Notifica a atualização da célula        
}

// Retorna referente a linha especificada
public Correio getLinhas(int indiceLinha) 
{
    return linhas.get(indiceLinha);
}  

}[/code]

Populando a tabela:

 private List<Correio> criaTabela() throws Throwable 
    {
        List<Correio> tabela = new ArrayList<Correio>();                
        
        dao.Conector con = new Conector();
        Statement st = con.conectar().createStatement();                                
        
        String sql="";//AQUI É O MEU SELECT DO BD
        ResultSet rs = st.executeQuery(sql);
        
        while(rs.next())
        {
            Correio linha = new Correio();
            linha.setSelecionado(false);
            linha.setTransportadora(rs.getString("Transportadora"));
            linha.setBase(rs.getString("Base"));
            linha.setContrato(rs.getString("Contrato"));
            linha.setLote(rs.getString("Lote"));
            linha.setNF(rs.getInt("NF"));
            linha.setValor(rs.getBigDecimal("valorNF"));
            linha.setNumProvisao(rs.getInt("Num_Provisao"));
            linha.setValorProvisao(rs.getBigDecimal("Valor_Provisao"));
            tabela.add(linha);
        }            
        return tabela;
    }

Para testar o valor que retorna do checkbox estou fazendo:

System.out.println(tblNFs.getValueAt(0,0));

o checkbox marcado retorna false e desmarcado também, alguem sabe onde está o erro?.

Rps nesta página há uma implementação de check box em uma tabela

http://docs.oracle.com/javase/tutorial/uiswing/components/table.html