Isso deve ser resolvido no modelo e não no renderer. Por exemplo:
[code]
public class MyModel extends AbstractTableModel {
...
public Class getColumnClass(int column) {
Class klass = String.class; // para todas as outras colunas use String
// primeira coluna deve ser marcável
if (column == 0) klass = Boolean.class;
return klass;
}
cara… qdo vc adiciona uma linha ao JTable, para criar uma coluna de CheckBox basta que o valor da respectiva coluna seja to tipo Boolean. Por exemplo:
modeloDaTabela.addRow(new Object[]{new Boolean(false), "Joao", "da Silva"});
modeloDaTabela.addRow(new Object[]{new Boolean(true), "Maria", "da Costa"});
esse codigo coloca os CheckBox na primeira coluna (de 3), sendo que a primeira está desmarcada e segunda marcada. Para ser clicável, basta vc implementar (ou sobrescrever) o metodo isCellEditable() de acordo com as suas necessidades. Lembrando que para isso funcionar é preciso implementar, novamente da maneira q melhor resolve seu problema, o método getColumnClass() do TableModel da sua tabela.
Como eu disse antes toda a questão da coisa está no modelo. Você deve prover um modelo editável de dados e implementar os seguintes métodos (levando em consideração cada coluna editável do seu modelo):
public static void main(String[] args) {
Runnable runner = new Runnable() {
public void run() {
Checked c = new Checked();
c.setVisible(true);
}
};
new Thread(runner).start();
}
public Checked() {
super();
setSize(400,300);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JTable table = new JTable(new MyModel());
Container c = getContentPane();
c.setLayout(new BorderLayout());
c.add(new JScrollPane(table), BorderLayout.CENTER);
}
}
class MyModel extends AbstractTableModel {
Object[][] data = new Object[16][2];
public MyModel() {
for (int i = 0; i < data.length; i++) {
data[i][0] = new Boolean(false);
data[i][1] = "Item " + i;
}
}
public int getRowCount() {
return data.length;
}
public int getColumnCount() {
return data[0].length;
}
public Object getValueAt(int row, int col) {
return data[row][col];
}
public boolean isCellEditable(int row, int col) {
if (col == 0) return true;
return false;
}
public Class getColumnClass(int column) {
Class klass = String.class;
if (column == 0) klass = Boolean.class;
return klass;
}
public void setValueAt(Object value, int row, int col) {
if (col == 0) data[row][col] = (Boolean)value;
}
Valeu pelas dicas pessoal, acabei resolvendo esse problema não usando uma JTable, porém de qualquer forma ficam no fórum as dicas e exemplos desse post de como se resolver esse tipo de problema.
Na verdade, você não adiciona a linha no Jtable, mas no modelo da JTable.
Se tabela é um JTable…
DefaultTableModel modelo = ( DefaultTableModel ) tabela.getModel();
modelo.addRow( //um vetor com os objetos que deseja inserir na linha ).
tabela.setModel( modelo );