JTable + java.lang.ClassCastException

1 resposta
P

Olá estou tentando passar uma tabele do meu banco para um JTable:

ClienteTableModel:
package locadora.gui.tabela;

import java.util.*;
import java.text.*;
import javax.swing.table.*;
import locadora.vo.Cliente;       

public class ClienteTableModel extends AbstractTableModel {
    private ArrayList<Cliente> clientes;
    //private List<Setor> setoresFiltrados;
    private boolean ordenarPorNome = true;
    /** Creates a new instance of TarefasTableModel */
    public ClienteTableModel(ArrayList<Cliente> clientes) {
        this.clientes=clientes;
    }
    
    public Object getValueAt(int rowIndex, int columnIndex) {
       // Livro umLivro = livros.get(rowIndex);
        Cliente cli = clientes.get(rowIndex);
        switch(columnIndex) {
            case 0: return cli.getNome();
            case 1: return cli.getDataNasc();
            case 2: return cli.getLimiteConta();            
              }
        return null;
    }
    
    public int getRowCount() {
        return clientes.size();
    }
    
    public int getColumnCount() {
        return 3;
    }
    
    public Cliente getValoresCliente(int rowIndex) {
        //if (rowIndex > setoresFiltrados.size())
        //    return null;
        //else
            return clientes.get(rowIndex);
    }
   
   
    public boolean isOrdenarPorNome() {
        return ordenarPorNome;
    }
    
    public void setOrdenarPorNome(boolean ordenarPorNome) {
        this.ordenarPorNome = ordenarPorNome;
    }  
     
}
ClienteCellRenderer:
package locadora.gui.tabela;

import java.util.*;

import java.awt.*;
import javax.swing.JLabel;
import javax.swing.table.*;
import locadora.vo.Cliente;
/**
 *
 * 
 */
public class ClienteCellRenderer extends DefaultTableCellRenderer{
    
    /**
     * Creates a new instance of LivroCellRenderer
     */
    public ClienteCellRenderer() {
        super();
    }
    
   public Component getTableCellRendererComponent (
            javax.swing.JTable table, Object value, boolean isSelected, boolean hasFocus,int row, int column) {
       
        JLabel label = (JLabel)super.getTableCellRendererComponent(table,value,isSelected,hasFocus,row,column);
        
        if (column != 1)
            label.setHorizontalAlignment(JLabel.CENTER);
        
        TableModel tm = table.getModel();
        
        Cliente cli = ((ClienteTableModel)tm).getValoresCliente(row);
        
        if (isSelected) {
            label.setForeground(Color.getHSBColor(100, 40, 190));
            label.setBackground(Color.GRAY);
        } else {
            label.setForeground(Color.BLACK);
            label.setBackground(Color.getHSBColor(100, 40, 190));
        }
        
        return label;
    }
    
}
ClienteColumnModel:
package locadora.gui.tabela;

import java.awt.*;
import javax.swing.table.*;

public class ClienteColumnModel extends DefaultTableColumnModel{
    private TableColumn criaColuna(int columnIndex, int largura,FontMetrics fm, boolean resizeable, String titulo) {
        int larguraTitulo = fm.stringWidth(titulo + " ");
        if (largura < larguraTitulo)
            largura = larguraTitulo;
        
        TableColumn col = new TableColumn(columnIndex);
        
        col.setCellRenderer(new ClienteCellRenderer());
        col.setHeaderRenderer(null);
        col.setHeaderValue(titulo);
        col.setPreferredWidth(largura);
        if (!resizeable) {
            col.setMaxWidth(largura);
            col.setMinWidth(largura);
        }
        col.setResizable(resizeable);
        return col;
    }
    /** Creates a new instance of TarefasColumnModel */
    public ClienteColumnModel(FontMetrics fm) {
        int digito = fm.stringWidth("0");
        int letra = fm.stringWidth("M");
        addColumn(criaColuna(0, 50 * letra, fm, false, "Nome"));
        addColumn(criaColuna(1, 10 * letra, fm, true, "Data Nascimento"));
        addColumn(criaColuna(2, 50 * digito, fm, true, "Limite"));
    }
    
}

eo JFrame:

package locadora.gui;

import com.sun.crypto.provider.RSACipher;
import java.awt.FontMetrics;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.table.AbstractTableModel;
import javax.swing.table.DefaultTableColumnModel;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
import locadora.dao.ClienteDAO;
import locadora.vo.Cliente;
import locadora.gui.tabela.ClienteTableModel;

/**
 *
 * @author  pessoal
 */
public class jfConsultas extends jfBase {
   
    /**
     * Creates new form jfConsultas
     */
        
    public jfConsultas() {        
        locadora.db.Conexao.conectar();
       
        
        initComponents();
      
        tClientes.setAutoCreateColumnsFromModel(false);
        java.awt.FontMetrics fm = tClientes.getFontMetrics(tClientes.getFont());
       
        setLocationRelativeTo( null );
        
    }
    
    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Código Gerado ">                          
    private void initComponents() {
        jTabbedPane1 = new javax.swing.JTabbedPane();
        jPanel1 = new javax.swing.JPanel();
        jScrollPane1 = new javax.swing.JScrollPane();
        tClientes = new javax.swing.JTable();
        bCarregarTableClientes = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        jScrollPane1.setAutoscrolls(true);
        tClientes.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {
                {null, null, null, null}
            },
            new String [] {
                "Título 1", "Título 2", "Título 3", "Título 4"
            }
        ));
        jScrollPane1.setViewportView(tClientes);

        bCarregarTableClientes.setText("Carrega Table");
        bCarregarTableClientes.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                bCarregarTableClientesActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
        jPanel1.setLayout(jPanel1Layout);
        jPanel1Layout.setHorizontalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(jPanel1Layout.createSequentialGroup()
                .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(29, 29, 29)
                        .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(jPanel1Layout.createSequentialGroup()
                        .addGap(90, 90, 90)
                        .addComponent(bCarregarTableClientes)))
                .addContainerGap(68, Short.MAX_VALUE))
        );
        jPanel1Layout.setVerticalGroup(
            jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
                .addGap(31, 31, 31)
                .addComponent(bCarregarTableClientes)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 31, Short.MAX_VALUE)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 273, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(28, 28, 28))
        );
        jTabbedPane1.addTab("tab1", jPanel1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 556, Short.MAX_VALUE)
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(60, 60, 60)
                .addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 411, Short.MAX_VALUE)
                .addContainerGap())
        );
        pack();
    }// </editor-fold>                        
    
    
    
    
    private void bCarregarTableClientesActionPerformed(java.awt.event.ActionEvent evt) {                                                       
        ArrayList<Cliente> clientes = new ArrayList<Cliente>();
        ClienteDAO cliDAO = new ClienteDAO();
        try {
               clientes=cliDAO.pegaTodos();               
        } catch (Exception e) {
            
        }
        ClienteTableModel modelCliente = new ClienteTableModel(clientes);
        tClientes.setModel(modelCliente);
        
    }                                                      
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new jfConsultas().setVisible(true);
            }
        });
    }
    
    // Declaração de variáveis - não modifique                     
    private javax.swing.JButton bCarregarTableClientes;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTabbedPane jTabbedPane1;
    private javax.swing.JTable tClientes;
    // Fim da declaração de variáveis                   
    
}

no método bCarregarTableClientesActionPerformed da o seguinte erro:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.String; cannot be cast to locadora.vo.Cliente

pq ele esta acontecendo ???

1 Resposta

E

Não tenho certeza pq não vi sua classe ClienteDAO, mas o problema pode estar acontecento na linha 125 do codigo do frame que voce postou no metodo bCarregarTableClientesActionPerformed.

O problema seria o seguinte, quando voce vai passar as informações para a classe cliente no seu Dao esta ocorrendo algum problema de Cast. Teria como postar para agente dar uma olhada, mais uma coisa teria como informar em que linha realmente o problema está ocorrendo, eu apenas chutei que poderia ser na 125.

flw

Paulo

Criado 21 de outubro de 2007
Ultima resposta 25 de out. de 2007
Respostas 1
Participantes 2