Como pegar lista de itens selecionados da AbstractTableModel [RESOLVIDO]

Olá Pessoal!

Tenho um a tela que lista funcionarios apontados em obras (Apontamentos) em uma jTable, e estou usando a AbstractTableModel para criar o modelo da tabela, eu queria pegar uma lista de Apontamentos selecionados na tabela. Segue a classe do modelo da tabela e o método que estou tentando desenvolver, mas esse retorna null:

public class ApontamentosTableModel extends AbstractTableModel {

private List<Apontamento> apontamentos = new ArrayList<>();
private String[] colunas = {"Id", "Chapa", "Funcionário", "Função", "Data",
        "Nome CC", "Status", "Líder", "Atividade"};

@Override
public String getColumnName(int column) {
    return colunas[column];
}

@Override
public int getRowCount() {
    return apontamentos.size();
}

@Override
public int getColumnCount() {
    return colunas.length;
}

@Override
public Object getValueAt(int linha, int coluna) {
    switch (coluna) {
        case 0:
            return apontamentos.get(linha).getCodApont();
        case 1:
            return apontamentos.get(linha).getFuncionario().getChapa();
        case 2:
            return apontamentos.get(linha).getFuncionario().getNome();
        case 3:
            return apontamentos.get(linha).getFuncionario().getFuncao().getNome();
        case 4:
            if (apontamentos.get(linha).getData() != null) {
                return apontamentos
                        .get(linha)
                        .getData()
                        .format(DateTimeFormatter
                                .ofPattern("dd/MM/yyyy HH:mm"));
            } else {
                return apontamentos.get(linha).getData();
            }
        case 5:
            return apontamentos.get(linha).getCentroCusto().getNome();
        case 6:
            return apontamentos.get(linha).getStatusApont().getCodStatusApont();
        case 7:
            return apontamentos.get(linha).getLider().getNome();
        case 8:
            return apontamentos.get(linha).getAtividade();
    }
    return null;
}

public List<Apontamento> getApontamentos() {
    return Collections.unmodifiableList(apontamentos);
}

public void addRow(Apontamento a) {
    this.apontamentos.add(a);
    this.fireTableDataChanged();
}

public void removeRow(Apontamento a) {
    this.apontamentos.remove(a);
    this.fireTableDataChanged();
}

public void clear() {
    this.apontamentos.clear();
    this.fireTableDataChanged();
}

}

public ArrayList getApontamentosSelecionados() {
if (jtaApontamentos.getSelectedRow() == -1) {
return null;
}
ArrayList apontamentos = new ArrayList<>();
int[] selecao = jtaApontamentos.getSelectedRows();
for (int i = 0; i < selecao.length; i++) {
apontamentos.add((Apontamento) aTableModel.getValueAt(selecao[i], 0));
}

    return apontamentos;
}

A linha acima está errada pois veja o que é retornado na coluna 0 do seu getValueAt:

@Override
public Object getValueAt(int linha, int coluna) {
    switch (coluna) {
        case 0:
            return apontamentos.get(linha).getCodApont(); // retorna o código e não o objeto apontamento

Assim deve resolver:

public List<Apontamento> getApontamentosSelecionados() {
    List<Apontamento> selecionados = new ArrayList<>();
    if (jtaApontamentos.getSelectedRow() != -1) {
        for (int selecao :  jtaApontamentos.getSelectedRows()) {
            Apontamento selecionado = apontamentos.get(selecao);
            selecionados.add(selecionado);
        }
    }
    return selecionados;
}

Cara funcionou perfeitamente! Muito obrigado.

1 curtida