Setar valor do Bd na ComboBox

Olá

tenhu uma combobox na minha janela de cadastro de frete nele tem os fretes para nota fiscal eletronica


Codigo - descrição
1               0- Por conta do emitente
2               1- Por conta do destinatário/remetente
3               2- Por conta de terceiros
4               9- Sem frete

minha ideia é q ao clicar em gravar se o usuario nao tiver selecionado nada na combo ela grava com o registri 4 - 9- Sem frete

meu código de verificação esta assim


//combobox do frete
                                    Frete frt = (Frete) cbFrete.getSelectedItem();
                                    if (cbFrete.getSelectedItem().equals("Selecione")) {
                                        cbFrete.setSelectedItem("9- Sem Frete");
                                        pst.setInt(23, frt.getFrt_cod());
                                    } else {
                                        pst.setInt(23, frt.getFrt_cod());
                                    }

tentei dessa forma tb


//combobox do frete
                                    Frete frt = (Frete) cbFrete.getSelectedItem();
                                    if (cbFrete.getSelectedItem().equals("Selecione")) {
                                        cbFrete.setSelectedItem(4);
                                        pst.setInt(23, frt.getFrt_cod());
                                    } else {
                                        pst.setInt(23, frt.getFrt_cod());
                                    }

ambas da esse erro


run:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to empresarial.Frete
	at empresarial.JFCliente.jbSalvarActionPerformed(JFCliente.java:1292)
	at empresarial.JFCliente.access$200(JFCliente.java:27)
	at empresarial.JFCliente$3.actionPerformed(JFCliente.java:226)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2341)
	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:6505)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
	at java.awt.Component.processEvent(Component.java:6270)
	at java.awt.Container.processEvent(Container.java:2229)
	at java.awt.Component.dispatchEventImpl(Component.java:4861)
	at java.awt.Container.dispatchEventImpl(Container.java:2287)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4492)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
	at java.awt.Container.dispatchEventImpl(Container.java:2273)
	at java.awt.Window.dispatchEventImpl(Window.java:2719)
	at java.awt.Component.dispatchEvent(Component.java:4687)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:703)
	at java.awt.EventQueue.access$000(EventQueue.java:102)
	at java.awt.EventQueue$3.run(EventQueue.java:662)
	at java.awt.EventQueue$3.run(EventQueue.java:660)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
	at java.awt.EventQueue$4.run(EventQueue.java:676)
	at java.awt.EventQueue$4.run(EventQueue.java:674)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:673)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:244)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:163)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:151)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:147)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:139)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:97)
CONSTRUÍDO COM SUCESSO (tempo total: 56 segundos)

alguem sabe como eu resolvo isso?

agradeço a atenção!

o erro acontece bem nessa linha aqui provavelmente.

 Frete frt = (Frete) cbFrete.getSelectedItem();  

o que o java quis dizer no cast exception é que não é possível transformar esse item selecionado em um Frete. Pois o retorno do getSelectedItem() é uma string do item selecionado e você está tentando transformar num tipo ‘‘Frete’’. Tente ver com essa dica que eu dei se você consegue resolver seu problema. :slight_smile:

Fellipe1, obrigado pela ajuda

fiz diferente tentei setar o valor na classe onde carrega a combobox.

mas continua dando o mesmo erro

[code]//combobox do frete

                                if (cbFrete.getSelectedItem().equals("Selecione")) {
                                    Frete frt = (Frete) cbFrete.getSelectedItem();
                                    frt.setFrt_cod(4);
                                    
                                    pst.setInt(23, frt.getFrt_cod());
                                } else {
                                    Frete frt = (Frete) cbFrete.getSelectedItem();
                                    pst.setInt(23, frt.getFrt_cod());
                                }[/code]

esse aqui é a classe Frete

package empresarial;

import java.sql.*;
import javax.swing.*;

public class Frete {

    private int frt_cod;
    private String frt_nome;

//construtor
    Frete(int frt_cod, String frt_nome) {
        this.frt_cod = frt_cod;
        this.frt_nome = frt_nome;

    }

    public int getFrt_cod() {
        return frt_cod;
    }

    public void setFrt_cod(int frt_cod) {
        this.frt_cod = frt_cod;
    }

    public String getFrt_nome() {
        return frt_nome;
    }

    public void setFrt_nome(String frt_nome) {
        this.frt_nome = frt_nome;
    }

    

    @Override
    public String toString() {
        return this.frt_nome;
    }

    //método para combobox
    //nao é necessario estanciar o objeto
    public static void carregaCombo(JComboBox combo, int cod) {
        String sql = "SELECT frt_codigo, frt_nome FROM frete order by frt_nome";

        try {
            Connection conn = Conexao.getConexao();
            PreparedStatement pstmt = conn.prepareStatement(sql);
            ResultSet rs = pstmt.executeQuery();
            combo.removeAllItems();
            combo.addItem("Selecione");
            Frete frete = null;
            while (rs.next()) {
                Frete frt = new Frete(rs.getInt("frt_codigo"), rs.getString("frt_nome"));
                if (cod == rs.getInt("frt_codigo")) {
                    frete = frt;

                }
                combo.addItem(frt);
            }
            if (frete != null) {
                combo.setSelectedItem(frete);
            }

        } catch (Exception e) {
            JOptionPane.showMessageDialog(null, "Erro ao Carregar Frete \n" + e.getMessage() + "\n" + e.getCause());
        }


    }
}

Cara ja que você seta na mão o código correspondente entao na teoria você só preciso do nome certo?

  Frete frt;

  frt.setFrt_nome(cbFrete.getSelectedItem().getName());
  

testa isso dai , :smiley:

Felipe1 mais uma vez obrigado pela força

mas achu q eu nao expliquei direito

O ComboBox ta funcionando blz.

O que eu quero fazer é o seguinte.

Quando o usuario não seleciona nenhuma das opções no combobox, ele pegar um determinado registro nesse caso o registro 4, cadastrado no BD.