Caros, estou tentando colocar o resultado de uma consulta feita utilizando o Criteria em uma classe AbstractTableModel, conforme codigos a seguir:
Classe AbstractTableModel
package util;
import java.util.ArrayList;
import javax.swing.table.AbstractTableModel;
public class TableModel extends AbstractTableModel {
private ArrayList linhas = null;
private String[] colunas = null;
private boolean[] colEditavel;
public TableModel(ArrayList lin, String[] col, boolean[] editavel)
{
setLinhas(lin);
setColunas(col);
colEditavel = editavel;
}
public ArrayList getLinhas()
{
return linhas;
}
public void setLinhas(ArrayList dados)
{
linhas = dados;
}
public String[] getColunas()
{
return colunas;
}
public void setColunas(String[] nomes)
{
colunas = nomes;
}
public int getColumnCount()
{
return colunas.length;
}
public int getRowCount()
{
return linhas.size();
}
public String getColumnName(int numCol)
{
return colunas[numCol];
}
public boolean isCellEditable(int numCol)
{
return colEditavel[numCol];
}
public Object getValueAt(int numLin, int numCol)
{
Object[] linha = (Object[]) getLinhas().get(numLin);
return linha[numCol];
}
public void setValueAt(Object dado, int numLin, int numCol)
{
if (isCellEditable(numCol))
{
Object[] linha = (Object[])getLinhas().get(numLin);
linha[numCol] = dado;
fireTableDataChanged();
}
}
public void addRow(Object[] dados)
{
getLinhas().add(dados);
fireTableDataChanged();
}
public void removeRow(int numLin)
{
getLinhas().remove(numLin);
fireTableDataChanged();
}
public Class getColumnClass(int numCol)
{
Object[] linha = (Object[]) getLinhas().get(0);
return linha[numCol].getClass();
}
}
Metodo de pesquisa com o criteria:
public ArrayList Consulta(){
Session session = HibernateFactory.AbreSession();
Transaction tx = session.beginTransaction();
try{
Criteria criteria = session.createCriteria(Usuarios.class);
return new ArrayList(criteria.list());
} finally {
tx.commit();
session.close();
}
}
Chamada do metodo com o AbstractTableModel
UsuariosDAO usuariosdao = new UsuariosDAO();
String[] colunas = new String[] {"Usuario I.D","Ativo","Data Cadastro","Nome","Login","Senha","Cargo"};
int[] tamanho = new int[] {80, 60, 150, 400, 200, 200, 250};
boolean[] edicao = {true, true, true, true, true, true};
modelo = new TableModel(usuariosdao.Consulta(), colunas, edicao);
tabela.setModel(modelo);
alinhamento = new DefaultTableCellRenderer();
for (int i = 0; i < tamanho.length; i++) {
tabela.getColumnModel().getColumn(i).setPreferredWidth(tamanho[i]);
tabela.getColumnModel().getColumn(i).setResizable(false);
alinhamento.setHorizontalAlignment(JLabel.RIGHT);
tabela.getColumnModel().getColumn(i).setCellRenderer(alinhamento);
}
alinhamento = null;
tabela.getTableHeader().setReorderingAllowed(false);
tabela.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
tabela.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
Quando tento executar, surge o seguinte erro:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: modelo.Usuarios cannot be cast to [Ljava.lang.Object;
at util.TableModel.getValueAt(TableModel.java:61)
at javax.swing.JTable.getValueAt(Unknown Source)
at javax.swing.JTable.prepareRenderer(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCell(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JViewport.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JLayeredPane.paint(Unknown Source)
at javax.swing.JComponent.paintChildren(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Me parece que ele não consegue pegar os valores do ArrayList retornado. Já pesquisei bastante aqui no forum e na net, mas não consegui solução.
Alguem poderia dar uma força?