Minha duvida eh a seguinte: tenho um JTable cuja primeira coluna eh um tipo boolean e mais outras duas colunas do tipo String. Seleciono uma linha “checando” a caixinha da primeira coluna, até aqui tudo bem, mas quando eu tento deletar a linha que “chequei” as coisas nao funcionam e a linha que some eh sempre a ultima linha da tabela. Resumindo, o que desejo fazer eh algo semelhante a uma caixa de email, onde escolho quais as mensagens serao deletadas. O que estou usando pra remoção da linha eh:
Collection<Integer> lista = ((MyModel)caixaDeMensagemView.getTabelaMensagem().getModel()).getValuesFromColumn(0);
Collection<Mensagem> listaDeMensagensParaDeletar = new ArrayList<Mensagem>();
for (Integer i : lista) {
Logger.getLogger(CaixaDeMensagemNavegacao.class).info(" removendo a mensagem: "+listaDeMensagens.get(i)+" na linha: "+i);
((MyModel)caixaDeMensagemView.getTabelaMensagem().getModel()).removeRow(i);
}
onde tenho
class MyModel extends DefaultTableModel {
private Object[][] data = {};
private Object[] columnName = {};
public MyModel(Object [][] data, Object[] columnName) {
super(data, columnName);
this.data = data;
this.columnName = columnName;
}
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 String getColumnName(int col){
return (String)columnName[col];
}
public Collection<Integer> getValuesFromColumn(int col){
//escolhemos a colecao LinkedList pois devemos manter a ordem da inclusao da lista
Collection<Integer> lista = new LinkedList<Integer>();
for(int k =0; k < data.length; k++){
if(data[k][col] != null && (Boolean)data[k][col]){
lista.add(k);
}
}
return lista;
}
public void setValueAt(Object value, int row, int col) {
if (col == 0 ){
data[row][col] = (Boolean)value;
}
}
}
}
Agradeco a ajuda que aparecer!!