Tenho uma dúvida em relação aos parâmetros passados ao método fireTableRowsInserted(int firstRow, int lastRow)
, parâmetros estes de índices inteiros inclusivos.
Em todos os exemplo que vi na implementação de um TableModel, no método para se adicionar uma List à List de dados já existentes, é passado no parâmetro de “lastRow” o índice atual, ou, a soma do índice anterior ao tamanho da list à ser adicionada, algo como:
public void addListBeans(List bean) {
int index = getRowCount();
listLinhas.addAll(bean);
fireTableRowsInserted(index, getRowCount());
}
public void addListBeans(List bean) {
int index = getRowCount();
listLinhas.addAll(bean);
fireTableRowsInserted(index, index + bean.size());
}
Os exemplos que vi aqui no fórum estão sempre assim, porém o índice não começa no zero? Então não deveria ser feita a subtração de 1 no valor passado em “lastRow”? E se utilizado desta forma, caso a List passada por algum motivo esteja vazia seria necessário um IF antes de invocar o método? Algo como:
public void addListBeans(List bean) {
int index = getRowCount();
listLinhas.addAll(bean);
if (getRowCount() > 0)
fireTableRowsInserted(index, getRowCount() - 1);
// Se a List veio vazia nem precisa chamar o método
}
Utilizando o código sem a subtração do índice não gera nenhuma Exception, mesmo colocando um valor qualquer muito superior ao índice real em “lastRow”, porém ao adicionar um Sorter na JTable, o fireTableRowsInserted
gera um IndexOutOfBoundsException
.
Então qual seria a forma correta de implementação?
Obrigado pela atenção!