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];
}
}