Erro Java java.lang.ClassCastException ao chamar dados de um JComboBox

1 resposta
java
Spirik

Boa Tarde! Estou tendo problemas ao pegar os valores contidos em um JComboBox para cadastrar em uma chave estrangeira! Sempre estou tendo o erro java.lang.ClassCastException. Segue o código dos métodos usados:

Método no FuncionarioDAO

BotaoUsuarioCadastrar.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Usuario u = new Usuario();
            String senha, csenha;
            senha = TxtSenhaUsuario.getText();
            csenha = TxtConfirmaSenhaUsuario.getText();
            if (senha.equals(csenha))
            {
                
                Funcionario f = (Funcionario) ComboNomeUsuario.getSelectedItem();
                u.setLoginUsuario(TxtUsuario.getText());
                u.setSenhaUsuario(TxtSenhaUsuario.getText());
                u.setFuncionarioUsuario(f);
                
                try
                {
                 if (ucont.Cadastrar(u))
                 {
                     JOptionPane.showMessageDialog(PainelUsuarios, "Cadastrado com Sucesso!", "Cadastro" , JOptionPane.INFORMATION_MESSAGE);
                 }
                       
                }
                catch (Exception ex){
                     JOptionPane.showMessageDialog(PainelUsuarios, "Erro: " + ex.toString(), "Ops!", JOptionPane.ERROR_MESSAGE);
                }

            }
            else
            {
                     JOptionPane.showMessageDialog(PainelUsuarios, "As senhas não batem!", "Ops", JOptionPane.ERROR_MESSAGE);
            }
            
            
        }
    });


public ArrayList ConsultaFuncionario () throws Exception{
   PreparedStatement ps = null;
     ResultSet rs = null;
try{
    
        con = ConnectionFactory.getConnection();
    
        
        String sql = "select * FROM tbl_funcionario";
               
       
        ps = con.prepareStatement(sql);
        rs = ps.executeQuery();
        ArrayList listafuncionario = new ArrayList();
        
        while(rs.next())
        {
            listafuncionario.add(rs.getString("id_funcionario") + " - " + rs.getString("nome_funcionario") + " " + rs.getString("sobrenome_funcionario"));
            
            
        }
        return listafuncionario;
        
 } catch (Exception e) {
        throw new Exception("Erro ao buscar os dados para o cadastro de Usuários!  " + e.toString());
    }
    finally
{
    ConnectionFactory.CloseConnection(con, ps, rs);
}

  
}

Método no UsuarioDAO:

public void Salvar (Usuario u) throws Exception{
   
    PreparedStatement ps = null;
    
    if (u == null)
    {
        throw new Exception("Erro: Usuario não pode ser nulo!");
    }
    
    try {
        
        
        String sql = "insert into tbl_usuario (id_usuario, login_usuario, senha_usuario, fk_funcionario, flag_ativo)"
                + "values (NEXTVAL('sequencia_usuario'),?,?,?,1)";
        
        ps = this.con.prepareStatement(sql);
        ps.setString(1, u.getLoginUsuario());
        ps.setString(2, u.getSenhaUsuario());
        ps.setInt(3, u.getFuncionarioUsuario().getIdFuncionário());
        
        ps.executeUpdate();
        
        ps.close();
        
    } catch (Exception e) {
        throw new Exception("Erro ao inserir os dados!" + e.getMessage());
    }
    finally{
        ConnectionFactory.CloseConnection(con, ps);
    }
    
}

Getters e Setters do Funcionario:

public class Funcionario {
        
private int IdFuncionário;
private String NomeFuncionario;
private String SobrenomeFuncionario;
private String CpfFuncionario;
private String RgFuncionario;
private String EmailFuncionario;
private TelefoneFisico TelefoneFuncionario;
private EnderecoFisico EnderecoFuncionario;
private Usuario UsuarioFuncionario;
private int FlagUsuario;

public int getIdFuncionário() {
    return IdFuncionário;
}

public void setIdFuncionário(int IdFuncionário) {
    this.IdFuncionário = IdFuncionário;
}

public String getNomeFuncionario() {
    return NomeFuncionario;
}

public void setNomeFuncionario(String NomeFuncionario) {
    this.NomeFuncionario = NomeFuncionario;
}

public String getSobrenomeFuncionario() {
    return SobrenomeFuncionario;
}

public void setSobrenomeFuncionario(String SobrenomeFuncionario) {
    this.SobrenomeFuncionario = SobrenomeFuncionario;
}

public String getCpfFuncionario() {
    return CpfFuncionario;
}

public void setCpfFuncionario(String CpfFuncionario) {
    this.CpfFuncionario = CpfFuncionario;
}

public String getRgFuncionario() {
    return RgFuncionario;
}

public void setRgFuncionario(String RgFuncionario) {
    this.RgFuncionario = RgFuncionario;
}

public String getEmailFuncionario() {
    return EmailFuncionario;
}

public void setEmailFuncionario(String EmailFuncionario) {
    this.EmailFuncionario = EmailFuncionario;
}

public TelefoneFisico getTelefoneFuncionario() {
    return TelefoneFuncionario;
}

public void setTelefoneFuncionario(TelefoneFisico TelefoneFuncionario) {
    this.TelefoneFuncionario = TelefoneFuncionario;
}

public EnderecoFisico getEnderecoFuncionario() {
    return EnderecoFuncionario;
}

public void setEnderecoFuncionario(EnderecoFisico EnderecoFuncionario) {
    this.EnderecoFuncionario = EnderecoFuncionario;
}

public Usuario getUsuarioFuncionario() {
    return UsuarioFuncionario;
}

public void setUsuarioFuncionario(Usuario UsuarioFuncionario) {
    this.UsuarioFuncionario = UsuarioFuncionario;
}

public int getFlagUsuario() {
    return FlagUsuario;
}

public void setFlagUsuario(int FlagUsuario) {
    this.FlagUsuario = FlagUsuario;
}

@Override
public String toString()
{
    return NomeFuncionario;
    
}
public String toString2()
{
    return SobrenomeFuncionario;
}

}

Getters e Setters do Usuaio:

public void Salvar (Usuario u) throws Exception{
   
    PreparedStatement ps = null;
    
    if (u == null)
    {
        throw new Exception("Erro: Usuario não pode ser nulo!");
    }
    
    try {
        
        
        String sql = "insert into tbl_usuario (id_usuario, login_usuario, senha_usuario, fk_funcionario, flag_ativo)"
                + "values (NEXTVAL('sequencia_usuario'),?,?,?,1)";
        
        ps = this.con.prepareStatement(sql);
        ps.setString(1, u.getLoginUsuario());
        ps.setString(2, u.getSenhaUsuario());
        ps.setInt(3, u.getFuncionarioUsuario().getIdFuncionário());
        
        ps.executeUpdate();
        
        ps.close();
        
    } catch (Exception e) {
        throw new Exception("Erro ao inserir os dados!" + e.getMessage());
    }
    finally{
        ConnectionFactory.CloseConnection(con, ps);
    }
    
}

Método de preenchimento do ComboBox (eu chamo ele no construtor)

private void AddFunconarioCombo () throws Exception
 {
            FuncionarioDAO fdao = new FuncionarioDAO();
            ComboNomeUsuario.removeAllItems();
            
            ArrayList listafuncionario = fdao.ConsultaFuncionario();
            
            Iterator it = listafuncionario.iterator();
            
            while(it.hasNext())
            {
             ComboNomeUsuario.addItem((it.next()));
           
            }
             ComboNomeUsuario.updateUI();
 }

Método no actionListener do Botão de cadastrar o Usuario:

BotaoUsuarioCadastrar.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Usuario u = new Usuario();
            String senha, csenha;
            senha = TxtSenhaUsuario.getText();
            csenha = TxtConfirmaSenhaUsuario.getText();
            if (senha.equals(csenha))
            { Funcionario f = (Funcionario) ComboNomeUsuario.getSelectedItem();
                u.setLoginUsuario(TxtUsuario.getText());
                u.setSenhaUsuario(TxtSenhaUsuario.getText());
                u.setFuncionarioUsuario(f);
                
                try
                {
                 if (ucont.Cadastrar(u))
                 {
                     JOptionPane.showMessageDialog(PainelUsuarios, "Cadastrado com Sucesso!", "Cadastro" , JOptionPane.INFORMATION_MESSAGE);
                 }
                       
                }
                catch (Exception ex){
                     JOptionPane.showMessageDialog(PainelUsuarios, "Erro: " + ex.toString(), "Ops!", JOptionPane.ERROR_MESSAGE);
                }

            }
            else
            {
                     JOptionPane.showMessageDialog(PainelUsuarios, "As senhas não batem!", "Ops", JOptionPane.ERROR_MESSAGE);
            }
            
            
        }
    });

pilha de erros:

Exception in thread AWT-EventQueue-0 java.lang.ClassCastException: java.lang.String cannot be cast to model.Funcionario

at view.TelaDeCadastro$22.actionPerformed(TelaDeCadastro.java:1504)

at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)

at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)

at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)

at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)

at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)

at java.awt.Component.processMouseEvent(Component.java:6533)

at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)

at java.awt.Component.processEvent(Component.java:6298)

at java.awt.Container.processEvent(Container.java:2236)

at java.awt.Component.dispatchEventImpl(Component.java:4889)

at java.awt.Container.dispatchEventImpl(Container.java:2294)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)

at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)

at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)

at java.awt.Container.dispatchEventImpl(Container.java:2280)

at java.awt.Window.dispatchEventImpl(Window.java:2746)

at java.awt.Component.dispatchEvent(Component.java:4711)

at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)

at java.awt.EventQueue.access$500(EventQueue.java:97)

at java.awt.EventQueue$3.run(EventQueue.java:709)

at java.awt.EventQueue$3.run(EventQueue.java:703)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)

at java.awt.EventQueue$4.run(EventQueue.java:731)

at java.awt.EventQueue$4.run(EventQueue.java:729)

at java.security.AccessController.doPrivileged(Native Method)

at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)

at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)

at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)

at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)

at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)

at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)

at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Os dados são inseridos no ComBoBox normalmente, mas na hora de usar essses dados para cadastrar usuários, ele me dá esse erro!
Dese já agradeço a atenção!

1 Resposta

darlan_machado

Provavelmente você tenha declarado o JComboBox como JComboBox e está tentando ler um Funcionario.

Criado 27 de fevereiro de 2018
Ultima resposta 27 de fev. de 2018
Respostas 1
Participantes 2