Seleção de linha na jtable com jcheckbox

Bom dia pessoal,

Tenho um TableModel para uma tabela onde sua primeira coluna é um checkbox…
Até ai tudo certo … ele aparece certinho e ao clicar ele marca ou desmarca …

Segue o código do tablemodel:

[code]public class AtividadeOsTableModel extends AbstractTableModel {

private static final long serialVersionUID = 1L;

private String[] nomesColunas = {"", "Código", "Descrição da Atividade", "Ultima Prev.", 
                                 "Data Execução", "Próxima Prev.", "Status"};
private Object[] objeto;
private List<Object[]> listaObjetos;


public AtividadeOsTableModel() {
    super();
    if (listaObjetos == null)
        listaObjetos = new ArrayList<Object[]>();
}

public AtividadeOsTableModel(List<Object[]> listaObject){
    super();
    listaObjetos = new ArrayList<Object[]>(listaObject);
}

public int getRowCount() {
    return this.listaObjetos.size();
}

public int getColumnCount() {
    return this.nomesColunas.length;
}

public Object getValueAt(int row, int col) {
    if (col == 0) {
        return (Boolean) listaObjetos.get(row)[col];
    } else if (col >= 1 && col <= 6) {
        return listaObjetos.get(row)[col];
    } else {
        return null;
    }
}

@Override
public void setValueAt(Object value, int row, int col) {
    if (col == 0) {
        listaObjetos.get(row)[col] = (Boolean) value;
    } else if (col >= 1 && col <= 6) {
        listaObjetos.get(row)[col] = value;
    }
    fireTableDataChanged();
}

@Override
public String getColumnName(int col){
    return this.nomesColunas[col];
}

@Override
public Class<?> getColumnClass(int col){
    if (col == 0) {
        return Boolean.class;
    } else if (col >= 1 && col <= 6) {
        return String.class;
    } else {
        return null;
    }
}

@Override
public boolean isCellEditable(int row, int col){
    if (col == 0)
        return true;
    else 
        return false;
}

public void adicionaLinhaEmBranco(){
    Object[] obj = new Object[] {Boolean.FALSE, "", "", "", "", "", ""};
    listaObjetos.add(obj);
    fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1);
}

public void adiciona(Object[] obj){
    listaObjetos.add(obj);
    fireTableRowsInserted(getRowCount() - 1, getRowCount() - 1);
}

public void adicionaLista(List<Object[]> listaObj){
    limpar();
    int i = getRowCount();
    this.listaObjetos.addAll(listaObj);
    fireTableRowsInserted(i, i + getRowCount() - 1);
}

public void remove(int indice){
    listaObjetos.remove(indice);
    fireTableRowsDeleted(indice, indice);
}

public int getIndice(Object[] obj){
    return listaObjetos.indexOf(obj);
}

public Object[] getObjeto(int indice){
    return listaObjetos.get(indice);
}

public void setObjeto(Object[] obj){
    objeto = obj;
    listaObjetos.add(objeto);
}

public void limpar(){
    if (listaObjetos != null && !listaObjetos.isEmpty()){
        int i = getRowCount();
        listaObjetos.clear();
        fireTableRowsDeleted(0, i - 1);
    }
}

}
[/code]

Ok … então meu problema é o seguinte…
quero pegar o índice da linha que o usuário digitou com a função:

porém se eu utilizo a função isCellEditable como está abaixo ele seleciona o checkbox mas retorna a linha como -1

@Override public boolean isCellEditable(int row, int col){ if (col == 0) return true; else return false; }

e se eu usar a função desta maneira: ele traz o valor da linha como 0 por exemplo mas não seleciona o checkbox…

@Override public boolean isCellEditable(int row, int col){ return false; }

como eu posso fazer para que seja selecionado o checkbox e ao mesmo tempo retornar o índice da linha selecionada corretamente???

Desde já grato

já usou :
return true ?

Opa … tudo bem renlih…

já usei sim …
com return true, com return false e tb ja tentei usar sem a função … e sempre da no mesmo … ou ele seleciona o checkbox mas não retorna a linha … ou ele retorna a linha mas não seleciona o checkbox …

ja tentei fazer um renderer e um editor tb unicamente para essa coluna … mas por incrivel que pareça aconteceu o mesmo problema …

o estranho é que se eu seleciono qualquer outra célula da tabela que não seja da coluna 0 … ele retorna a linha selecionada certinho … mas quando clico no checkbox que está na coluna 0 … seja ele em qualquer linha … sempre retorna -1…

sabe porque pode estar acontecendo isso??? alguma luz?

obrigado

talvez isso te ajude

;]

Olá charleston10,

então, olhei o código que vc passou e na sua função de mouselistner tem uma linha assim…

que ao meu ponto de vista funciona parecido com:

na JTable …

porém é justamente ai que não estou conseguindo pegar o indice da linha que o usuário clicou na tabela, quando ele clica em qualquer célula da coluna 0(zero) …
e a função locationToIndex eu não encontrei para jtable …

tem alguma outra sugestão??

grato

Na verdade é assm, esse codigo do JTable ele nao pega o valor da coluna, mas sim qual linha vc selecionou, e isso
nao vai ser importante pra vc nesse seu caso.
Vc deve pegar o valor da celula, para isso o que será possivel fazer, pegar qual linha e depois disso saber qual coluna
vc esta. Atraves disso vc ja sabe a coordenada. Linha - Coluna (entao vc sabe a celula)

De uma olhada.
http://javaaberto.blogspot.com.br/2012/08/pega-codigo-selecionado-de-um-jtable.html

Opa …

então charleston … na verdade neste momento eu realmente preciso saber qual linha o usuario selecionou … pois tenho uma tabela que funciona assim …

tenho uma coluna com os checkboxes (coluna 0) na qual somente esta coluna vai ser editavel… as outras colunas são as datas das atividades na seguinte ordem … data da ultima revisão … data atual e data da proxima revisão … então quando eu seleciono uma linha no checkbox essas datas são atualizadas, o status da atividade é alterado e é realizada a baixa daquela atividade …

tenho o codigo pronto ja que faz isso … so que no meu codigo eu estou percorrendo toda a tabela para saber quais atividades foram marcadas e realizar tal processo … não queria fazer assim … quueria ir realizando a baixa conforme o usuário fosse clicando nos checkboxes …

por isso realmente preciso saber em qual linha ele clicou … para não ter que varrer a tabela toda vez que ele clicar para saber quais linhas foram selecionadas … entende??

vc teria alguma outra sugestão??

Grato

Outra sugestão é usar o JList q te mandei acima, pois ja esta tudo pronto.

O usuario seleciona todas as linhas depois ele aperta o botao dar baixa e pronto.
Nao tem muito que esquentar cabeça, ja ta feito pra isso mesmo.

;]