Estou com uma pergunta tão idiota que dá até vergonha de perguntar, mas é que não acho solução.
Meu Problema:
Tenho uma ArrayList de um objeto que representa o número de linhas na minha JTable, da classe model.
pois bem, todos os outros métodos estão funcionando, perfeitamente, o problema é o remove() Não faço a menor ideia de porque tá dando Exception na hora de remover o ultimo elemento da ArrayList. fazendo uma correção, exceto o ultimo elemento todos os outros elementos estão sendo removidos normalmente, problema é o ultimo.
O erro:
Exception in thread “AWT-EventQueue-0” java.lang.IndexOutOfBoundsException: Index: 6, Size: 6
código do Model do Jtable.
package utfpr.tsi.meOrganize.model.impl;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;
import javax.swing.table.AbstractTableModel;
import utfpr.tsi.meOrganize.model.IEModelTable;
import utfpr.tsi.meOrganize.model.entity.Discipline;
/**
* Classe responsável por modelar a Jtable do sistema
* informando: os nomes das colunas e das linhas, seu tamanho,
* e seus métodos para o comportamento da JTable. Além de,
* guarda as alterações e remoções em uma fila para um
* possível resgate.
* <br><br>
* Nome do projeto: MeOrganize <br>
* Integra ao pocote: utfpr.tsi.meOrganize.model.impl<br>
* @author Vinicius Cavalcanti
* @since Implementação da aplicação.
* @version 1.0v 2016
*/
public class DisciplineModelTabel extends AbstractTableModel implements IEModelTable<Discipline> {
private ArrayList<Discipline> rows;
private Queue<Discipline> listRemoved;
private String[] columns = new String[]{"ID", "Disciplinas"};
private static final int COL_ID = 0;
private static final int COL_NAME = 1;
/**
* Construtor: espera um objeto do tipo Discipline para
* instanciar a lista das Disciplinas.
* @param disciplines - lista das disciplinas.
*/
public DisciplineModelTabel(ArrayList<Discipline> disciplines) {
this.rows = new ArrayList<>(disciplines);
listRemoved = new LinkedList<>();
}
/**
* Método que remove o ultimo elemento a entradar na fila.
*/
@Override
public void undoLastRemoved() {
if(!listRemoved.isEmpty()) {
Discipline discipline = listRemoved.poll();
addDiscipline(discipline);
}
}
/**
* Método adiciona o elemento retirado da Jtable
* para guardar na fila de deletados, para recuperação.
*/
@Override
public void addLastRemoved(Discipline discipline){
listRemoved.add(discipline);
}
/**
* Método que limpa a fila.
*/
@Override
public void clearlistRemoved() {
if(!listRemoved.isEmpty())
listRemoved.clear();
}
/**
* @return - True para fila cheia false para não.
*/
@Override
public boolean isEmptyList() {
return listRemoved.isEmpty();
}
/**
* @return quantidade de linhas na tabela.
*/
@Override
public int getRowCount() {
return this.rows.size();
}
/**
* @return quantidade de colunas na tabela.
*/
@Override
public int getColumnCount() {
return this.columns.length;
}
/**
* Método que retorna os valores das linhas e colunas da tabela.
* Instancia um objeto do tipo Disciplina e busca os valores de seus
* atributos
* @param rowIndex - Index da linha para retorno do valor.
* @param columnIndex - Index da coluna para retorno do valor.
* @return
*/
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
Discipline discipline = rows.get(rowIndex);
if(columnIndex == COL_ID)
return discipline.getId();
else if (columnIndex == COL_NAME)
return discipline.getName();
return "";
}
/**
* retorna o valor da linha selecionada da JTable
* retornando-o em um objeto.
* @param aValue - o item selecionado.
* @param rowIndex - index da linha do item da Jtable
* @param column - coluna do item selecionado.
*/
@Override
public void setValueAt(Object aValue, int rowIndex, int column) {
Discipline discipline = rows.get(rowIndex);
if (column == COL_ID)
discipline.setId((Integer) aValue);
else if (column == COL_NAME)
discipline.setName(aValue.toString());
}
/**
* Método que retorna o nome da coluna.
* @param columnIndex - o index da coluna
* @return - o nome da coluna.
*/
@Override
public String getColumnName(int columnIndex) {
return columns[columnIndex];
}
/**
* Método que retorna o tipo da coluna.
* @return o tipo da coluna.
*/
@Override
public Class getColumnClass(int columnIndex) {
if (columnIndex == COL_ID) {
return Integer.class;
}
return String.class;
}
/**
* Método que retonar o objeto de uma linha da JTable.
* @param rowIndex - o index da linha selecionada.
* @return O item (disciplina) da linha selecionada.
*/
@Override
public Discipline getDiscipline(int rowIndex) {
return rows.get(rowIndex);
}
/**
* Método que adiciona uma elemento a Jtable e
* atualizá-a para mostrar o elemento nela.
* @param discipline - A entidade disciplina adicionada.
*/
@Override
public void addDiscipline(Discipline discipline) {
rows.add(discipline);
int lastIndex = getRowCount() - 1;
fireTableRowsInserted(lastIndex, lastIndex);
}
/**
* Método que altera um item na Jtable e
* atualiza para mostrar a alteração na entidade.
* @param rowIndex - o index da linha selecionada para alteração
* @param marca - entidade que vai ser alterada.
*/
@Override
public void update(int rowIndex, Discipline marca) {
rows.set(rowIndex, marca);
fireTableRowsUpdated(rowIndex, rowIndex);
}
/**
* Método que remove um item da JTable e também
* atualizá-a removendo o item da JTable.
* @param rowIndex - o index da linha do item que vai ser removido.
*/
@Override
public void remove(int rowIndex) {
fireTableRowsDeleted(rowIndex, rowIndex);
rows.remove(rowIndex);
listRemoved.add(rows.get(rowIndex));
}
@Override
public String getArray() {
String disciplines = "";
for(int i = 0; i < rows.size(); i++) {
disciplines += "index " + i + " nome: " + rows.get(i).getName() + "\n";
}
return disciplines;
}
/**
* Método que habilida a edição na célula selecionada
* @param rowIndex - linha selecionada.
* @param columnIndex - coluna selecionada
* @return retorna se Verdadeiro a célula pode ser editada falso para não.
*/
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
}
Quem pode me esclarecer fico muito grato.