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

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!

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