JTable com checkBox [RESOLVIDO]

Olá galera!
Fiz um modelo para a minha JTable, onde no primeiro campo aparece um checkBox, mas eu não consigo marca-lo!
O que está faltando?
Código:

public class ProdutoTableModel extends AbstractTableModel {
    
    private final int COL_CHECK = 0;
    private final int COL_NOME = 1;
    private final int COL_QUANT = 2;
    
    private List<Produto> produtos;

    public ProdutoTableModel() {
        produtos = new ArrayList<Produto>();
    }

    public ProdutoTableModel(List<Produto> lista) {
        this();
        produtos.addAll(lista);
    }

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

    public int getColumnCount() {        
        return 3;
    }

    @Override
    public String getColumnName(int column) {        
        if (column == COL_CHECK){
            return "#";
        }
        if (column == COL_NOME) {
            return "Nome";
        } else if (column == COL_QUANT) {
            return "Quant. Disp";
        }
        return "";
    }

    @Override
    public Class<?> getColumnClass(int columnIndex) {  
        if (columnIndex == COL_CHECK){
            return Boolean.class;
        }
        if (columnIndex == COL_NOME) {
            return String.class;
        } else if (columnIndex == COL_QUANT) {
            return Integer.class;
        }
        return super.getColumnClass(columnIndex);
    }

    public Object getValueAt(int rowIndex, int columnIndex) {
        Produto p = produtos.get(rowIndex);

        if (columnIndex == COL_CHECK){
            return new Boolean(false);
        }
        if (columnIndex == COL_NOME) {
            return p.getNome();
        } else if (columnIndex == COL_QUANT) {
            return p.getQuant();
        }
        return "";
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        return (columnIndex == COL_CHECK);
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        Produto p = produtos.get(rowIndex);

        if (columnIndex == COL_CHECK){
            new Boolean(true);
        }
        if (columnIndex == COL_NOME) {
            p.setNome(aValue.toString());
        } else if (columnIndex == COL_QUANT) {
            p.setQuant(Integer.parseInt(aValue.toString()));
        }

        fireTableDataChanged();
    }

Agradeço a ajuda!

Teria que setar o valor do campo boolean do seu produto.

[code]@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Produto p = produtos.get(rowIndex);

    if (columnIndex == COL_CHECK){
        p.setCampoBoolean((Boolean) aValue);
    }[/code]

Outra coisa é que seu getValueAt está sempre retornando false. A JTable exibe os dados a partir do getValueAt, então se retornar sempre false, o checkBox ficará sempre desmarcado.

[quote=Eric Yuzo]Teria que setar o valor do campo boolean do seu produto.

[code]@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Produto p = produtos.get(rowIndex);

    if (columnIndex == COL_CHECK){
        p.setCampoBoolean((Boolean) aValue);
    }[/code]

Outra coisa é que seu getValueAt está sempre retornando false. A JTable exibe os dados a partir do getValueAt, então se retornar sempre false, o checkBox ficará sempre desmarcado.[/quote]
Na verdade o produto não tem um campo boolean, eu apenas necessito que na JTable tenha um campo para que eu possa marcar várias linhas e posteriormente inserir os produtos marcados em uma List
Quanto ao getValueAt eu apenas coloquei True como valor inicial, gostaria de saber como eu posso marcá-lo!
Valeu!

Na verdade deveria existir um campo que guarde o estado, não tem como fazer diretamente no getValueAt e setValueAt, estes métodos servem apenas para setar e recuperar valor de um atributo, como fazem os getters e setters normalmente.

O TableModel deveria trabalhar com uma única classe. Talvez você possa criar uma classe “ProdutoAdicionado”, por exemplo, e nele guardar a referência de um produto e permitir a seleção ou não.

[code]public class ProdutoAdicionado {

private Produto produto; // faz referência ao produto, para ser usado no table model.

private boolean selecionado; // este campo definirá o comportamento do check box da tabela.
. . .

}[/code]

if (columnIndex == COL_CHECK){
return new Boolean(false);
}

Retornando sempre false, ele nunca será marcado.

O setValueAt pode até ser chamado, mas com esse return false vai ficar sempre não selecionado.

[quote=Eric Yuzo]Na verdade deveria existir um campo que guarde o estado, não tem como fazer diretamente no getValueAt e setValueAt, estes métodos servem apenas para setar e recuperar valor de um atributo, como fazem os getters e setters normalmente.

O TableModel deveria trabalhar com uma única classe. Talvez você possa criar uma classe “ProdutoAdicionado”, por exemplo, e nele guardar a referência de um produto e permitir a seleção ou não.

[code]public class ProdutoAdicionado {

private Produto produto; // faz referência ao produto, para ser usado no table model.

private boolean selecionado; // este campo definirá o comportamento do check box da tabela.
. . .

}[/code][/quote]
Fiz como vc me falou!
Criei um atributo do tipo Boolean.
e lá no método setValueAt, onde o Mark se referia, ficou assim:

[code]public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
Produto p = produtos.get(rowIndex);

    if (columnIndex == COL_CHECK){
        p.setSelecionado((Boolean) aValue);//Aqui
    }
    if (columnIndex == COL_NOME) {
        p.setNome(aValue.toString());
    } else if (columnIndex == COL_QUANT) {
        p.setQuant(Integer.parseInt(aValue.toString()));
    }

    fireTableDataChanged();
}[/code]

Então… tudo resolvido!
Agradeço a todos pela ajuda!