Ajuda Jtable

Pessoal estou com um probleminha quanto ao preenchimento de uma coluna na jtable, caso:

Tenho uma jTable onde a primeira coluna quero que tenha um checkbox só que quando estou colocando ela para rodar não esta mostrando, segue meu codigo abaixo:

package com.br.aplicacao.cliente.telas.reenviomensagem;

import com.br.aplicacao.servidor.eventos.EventoDadosTelaReenvioMensagensDmq;
import com.br.framework.util.datahora.DataHoraUtil;
import java.lang.Boolean;
import javax.swing.table.AbstractTableModel;

public class ModeloTabelaReenvioMensagem extends AbstractTableModel {

    /** Constante indicando a ordem da coluna Data da tabela de reenvio de mensagens*/
    public static final int COLUNA_REENVIO = 0;
    /** Constante indicando a ordem da coluna Data da tabela de reenvio de mensagens*/
    public static final int COLUNA_DATA = 1;
    /** Constante indicando a ordem da coluna Tipo da tabela de reenvio de mensagens */
    public static final int COLUNA_TIPO = 2;
    /** Número de colunas na tabela */
    public static final int NUMERO_COLUNAS = 3;
    /** Lista contendo os dados sendo exibidos na tabela */
    private EventoDadosTelaReenvioMensagensDmq dadosTabela;


    public ModeloTabelaReenvioMensagem(EventoDadosTelaReenvioMensagensDmq dadosTabela) {

        // início do método
        setDadosTabela(dadosTabela);
    }
    public EventoDadosTelaReenvioMensagensDmq getDadosMensagensEnvidas(int linha) {

        // início do método
        return getDadosTabela();
    }
    @Override
    public Class getColumnClass(int coluna) {

        // declaração das variáveis
        Object dadoCelula;      // dado da célula da tabela

        // início do método
        if (coluna == 0) {
            return Boolean.class;
        }
        if (getRowCount() == 0) {
            return Object.class;
        }
        dadoCelula = getValueAt(0, coluna);
        if (dadoCelula == null) {
            return Object.class;
        }

        return dadoCelula.getClass();
    }
    @Override
    public int getRowCount() {

        // início do método
        return getDadosTabela().getConteudoMensagem().size();
    }
    public int getColumnCount() {

        // início do método
        return NUMERO_COLUNAS;
    }

    @Override
    public Object getValueAt(int rowIndex, int columnIndex) {

        // declaração das variáveis
        EventoDadosTelaReenvioMensagensDmq dadosTabela;   // conteúdo da linha selecionada

        // início do método
        dadosTabela = getDadosTabela();
        switch (columnIndex) {
            case COLUNA_DATA:
                return DataHoraUtil.formataDataHora("dd/MM/yyyy HH:mm:ss", dadosTabela.getDataEnvio());
            case COLUNA_TIPO:
                return dadosTabela.getTipo();

        }
        return null;
    }


    private EventoDadosTelaReenvioMensagensDmq getDadosTabela() {

        // início do método
        return dadosTabela;
    }

 
    private void setDadosTabela(EventoDadosTelaReenvioMensagensDmq dadosTabela) {

        // início do método
        this.dadosTabela = dadosTabela;
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        super.setValueAt(aValue, rowIndex, columnIndex);
    }
}

Abaixo segue meu codigo que estou chamando meu modelo e definindo o cabeçalho da tabela:

 /**
     * Cria o cabeçalho da tabela exibindo os grupos e define sua propriedades iniciais.<p>
     *
     * @return Cabeçalho da tabela Grupos.
     */
    private DefaultTableColumnModel defineCabecalhoTabelaReenvioMensagens() {

        // declaração das variáveis
        DefaultTableColumnModel cabecalhoTabela;        // modelo contendo o cabeçalho da tabela
        TableColumn coluna;                             // coluna do cabeçalho

        // início do método
        cabecalhoTabela = new DefaultTableColumnModel();

        // criando a coluna reenvia?
        coluna = new TableColumn();
        coluna.setModelIndex(ModeloTabelaReenvioMensagem.COLUNA_REENVIO);
        coluna.setHeaderValue("Reenvio?");
        coluna.setPreferredWidth(200);
        cabecalhoTabela.addColumn(coluna);
        // criando a coluna Data
        coluna = new TableColumn();
        coluna.setModelIndex(ModeloTabelaReenvioMensagem.COLUNA_DATA);
        coluna.setHeaderValue("Data");
        coluna.setPreferredWidth(300);
        cabecalhoTabela.addColumn(coluna);

        // criando a coluna Tipo
        coluna = new TableColumn();
        coluna.setModelIndex(ModeloTabelaReenvioMensagem.COLUNA_TIPO);
        coluna.setHeaderValue("Tipo");
        coluna.setPreferredWidth(80);
        cabecalhoTabela.addColumn(coluna);

        return cabecalhoTabela;
    }

/**
     * Preenche a tabela reenvio de mensagens com os dados recebidos do servidor.<p>
     *
     * @param mensagensEnviadas Lista contendo os dados recebidos do servidor
     */
    public void preencheDadosTela(EventoDadosTelaReenvioMensagensDmq mensagensEnviadas) {

        // início do método

        tblMensagem.setModel(new ModeloTabelaReenvioMensagem(mensagensEnviadas));
        tblMensagem.setColumnModel(defineCabecalhoTabelaReenvioMensagens());
        tblMensagem.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);

        // definindo o alinhamento do cabeçalho e dos dados da tabela de grupos
        tblMensagem.getColumnModel().getColumn(0).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        tblMensagem.getColumnModel().getColumn(0).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));
        tblMensagem.getColumnModel().getColumn(1).setHeaderRenderer(new AlinhaTituloColunaTabela(SwingConstants.CENTER));
        tblMensagem.getColumnModel().getColumn(1).setCellRenderer(new AlinhaColunaTabela(SwingConstants.LEFT));



    }

Se alguem puder me ajudar agradeço.

Ninguem?