Não consigo utilizar JTable X ArrayList

Ao utilizar programa-exemplo de utilização de JTable, os objetos (botões e textfields) não são aparecem e a mensagem abaixo é apresentada:

Exception in thread “AWT-EventQueue-0” java.lang.ClassCastException: java.lang.String
at br.multilaser.comex.ModelTable.getValueAt(ModelTable.java:23), a linha 23 está em negrito:

public Object getValueAt(int rowIndex, int columnIndex) {
String [] linha = (String [])getLinhas().get(rowIndex); return linha[columnIndex];
}

Segue a classe completa:

package br.multilaser.comex;
 
import java.util.ArrayList;
import java.util.Iterator;
import javax.swing.table.AbstractTableModel;

public class ModelTable extends AbstractTableModel{
private ArrayList linhas = null;
private String[] colunas = null;
private boolean [] colsEdicao;

public ModelTable(ArrayList dados, String[] colunas, boolean [] edicao){
	setLinhas(dados);
	setColunas(colunas);
	colsEdicao = edicao;
}

public int getColumnCount() {return getColunas().length;}

public int getRowCount() {return getLinhas().size();}

public Object getValueAt(int rowIndex, int columnIndex) {
	String [] linha = (String [])getLinhas().get(rowIndex);
	return linha[columnIndex];
}

public String[] getColunas() {return colunas;}

public ArrayList getLinhas() {return linhas;}

public void setColunas(String[] strings) {colunas = strings;}

public void setLinhas(ArrayList list) {linhas = list;}

public void setValueAt(Object value, int row, int col){
	String [] linha = (String [])getLinhas().get(row);
	linha[col] = (String)value;
	fireTableCellUpdated(row,col);
	}
public boolean isCellEditable(int row, int col){
	return colsEdicao[col];
}

public void addRow( String [] dadosLinha){
	getLinhas().add(dadosLinha);
	getLinhas().add(dadosLinha);
	
	int linha = getLinhas().size()-1;
	fireTableRowsInserted(linha,linha);
	return;
}

public void removeRow(int row){
	getLinhas().remove(0);
	fireTableRowsDeleted(row,row);
}

public boolean removeRow(String val, int col){
	Iterator i = getLinhas().iterator();
	int linha = 0;
	while(i.hasNext()){
		String[] linhaCorrente = (String[])i.next();
		linha++;
		if( linhaCorrente[col].equals(val) ){
			getLinhas().remove(linha);
			fireTableRowsDeleted(linha,linha);
			return true; 
		}
	}
	return false;
	}

public String getColumnName(int col){
	return getColunas()[col];
	}

}

A exceção diz que este casting é ilegal, ou seja, o objeto retornado pelo método getLinhas().get(rowIndex) não é um vetor de Strings. Revise o seu código :wink: