Não consigo selecionar checkbox dentro da JTable

Boa tarde pessoal,
sou novo em programação Java e estou com uma dificuldade quando coloco checkbox dentro de uma JTable. Já li vários tópicos sobre o assunto, mas mesmo assim não consegui resolver…
Basicamente eu tenho uma tabela que é preenchida com dados de um BD e nas ultimas duas colunas eu quero colocar os checkbox, ja consegui faze-los aparecer, mais não consigo marca-los…

sera q alguem pode me ajudar??

Segue meu codigo…

CODIGO ABSTRACTTABLE MODEL:

package ModeloBeans;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;

public class ModeloTabela extends AbstractTableModel{
    private ArrayList linhas = null;
    private String[] colunas = null;
    
public ModeloTabela (ArrayList lin, String[] col){
    setLinhas(lin);
    setColunas(col);
} 

    public ArrayList getLinhas() {
        return linhas;
    }

    public void setLinhas(ArrayList linhas) {
        this.linhas = linhas;
    }

    public String[] getColunas() {
        return colunas;
    }

    public void setColunas(String[] colunas) {
        this.colunas = colunas;
    }
    
public int getColumnCount(){
    return colunas.length;
}

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

public String getColumnName (int numCol){
    return colunas[numCol];
}

public Object getValueAt (int numLin, int numCol){
    Object[] linha = (Object[])getLinhas().get(numLin);
    return linha[numCol];
}

public Class getColumnClass(int c){
    return getValueAt(0, c).getClass();
}

public boolean isCellEditabe(int row, int col){
    return col == 0;
}

public void setValueAt(Object valor, int numLin, int numCol){
    Object[] linha = linhas[numLin];  // AQUI TEM UM ERRO "ARRAY REQUIRED, BUT ARRAYLIST IS FOUND" NAO SEI COMO RESOLVER??
    linha[numCol] = valor;
    fireTableDataChanged();
           
}
    
}

E AQUI ONDE EU PREENCHO A TABELA

 public void preencherTabelaAgendaProfissionais (String Sql){
        ArrayList dados = new ArrayList();
        String [] colunas = new String [] {"Chegada","Prontuário","Paciente","Profissional","Especialidade",
            "Data","Presença","Atendimento"};
        
        conex.conexao();
        conex.executaSql(Sql);
        
        try{
            conex.rs.first();
            do {                
            dados.add(new Object[] {conex.rs.getInt("chegada"),conex.rs.getInt("prontuario"),
            conex.rs.getString("paciente"),conex.rs.getString("profissional"),conex.rs.getString("especialidade"),
            conex.rs.getString("data"),conex.rs.getBoolean("presenca"),conex.rs.getBoolean("consulta")});   
            } while (conex.rs.next());
            
        }catch(SQLException ex){
            JOptionPane.showMessageDialog(null, "Ainda não existem agendamentos para este dia! \nPara adicionar clique em NOVO" );
        }
        
              
       ModeloTabela modelo = new ModeloTabela(dados, colunas);
                    
        jTableAgendaProfissional.setModel(modelo);
        jTableAgendaProfissional.getColumnModel().getColumn(0).setPreferredWidth(70);
        jTableAgendaProfissional.getColumnModel().getColumn(0).setResizable(false);
        jTableAgendaProfissional.getColumnModel().getColumn(1).setPreferredWidth(70);
        jTableAgendaProfissional.getColumnModel().getColumn(1).setResizable(false);
        jTableAgendaProfissional.getColumnModel().getColumn(2).setPreferredWidth(150);
        jTableAgendaProfissional.getColumnModel().getColumn(2).setResizable(false);
        jTableAgendaProfissional.getColumnModel().getColumn(3).setPreferredWidth(180);
        jTableAgendaProfissional.getColumnModel().getColumn(3).setResizable(false);
        jTableAgendaProfissional.getColumnModel().getColumn(4).setPreferredWidth(120);
        jTableAgendaProfissional.getColumnModel().getColumn(4).setResizable(false);
        jTableAgendaProfissional.getColumnModel().getColumn(5).setPreferredWidth(80);
        jTableAgendaProfissional.getColumnModel().getColumn(5).setResizable(false);
        jTableAgendaProfissional.getColumnModel().getColumn(6).setPreferredWidth(70);
        jTableAgendaProfissional.getColumnModel().getColumn(6).setResizable(false);
        jTableAgendaProfissional.getColumnModel().getColumn(7).setPreferredWidth(80);
        jTableAgendaProfissional.getColumnModel().getColumn(7).setResizable(false);
       
                
        jTableAgendaProfissional.getTableHeader().setReorderingAllowed(false);
        jTableAgendaProfissional.setAutoResizeMode(jTableAgendaProfissional.AUTO_RESIZE_OFF);
        jTableAgendaProfissional.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
           
        
        conex.desconecta();
    }

Vc está usando um ArrayList e não um array, então:

public void setValueAt(Object valor, int numLin, int numCol){
	Object[] linha = (Object[]) linhas.get(numLin);
	linha[numCol] = valor;
	fireTableDataChanged();
}

Obrigado pela ajuda Diego, corrigi esse erro no meu código mais ainda assim não consigo marcar os checkbox, fiz um teste aqui e quando o valor no banco e True aí o checkbox fica marcado, deve ter alguma coisa a ver com o set, mais não tô conseguindo resolver…

Verifique se este tópico ajuda:

Abra as propriedades da sua JTable, abra o model, se a coluna já estiver definida como booleana, basta que vc marque a coluna desejada como editável, caso contrário mude o tipo dela de object para booleana e defina como editável.

como a tabela e gerada apartir do BD, nao tem opcao no model da tabela para marcar como editável…

Acho que ate pode ajudar… mas nao sei como fazer o que ele sugere … :frowning:

neste caso, cria um método, ou passa via comando!

Exemplo:

public boolean isCellEditable(int rowIndex, int columnIndex) {  
       switch (columnIndex) {  
        case SELECIONAR: //CheckBox  
         return true;  
        default:  
         return false;  
       }  
}