Dúvida JCombobox [resolvido]

Olá a todos,

Estou com o seguinte probema, tenho um form onde existe um jbombobox que é preenchido com uma lista de objetos carregados via hibernate, veja o método que criei para isto:

    public void PreencheEstagio(){
        this.sessao = this.factory.openSession();
        List lista_estagio = this.sessao.createQuery("from syslagg.beans.Estagio").list();
        for(Object o : lista_estagio){
            Estagio estagio_combo = (Estagio) o;
            fieldEstagio.addItem(estagio_combo.getNome());
        }
        this.factory.close();
    }

Até ai tudo bem o meu campo é preenchido normalmente, o problema que tenho é na hora de salvar o dado na base de dados, preciso pegar o objeto que é selecionado pelo usuário, para o relaciomamento do hibernate funcionar, ou seja, preciso passar o objeto para o insert funcionar.

Alguém tem alguma sugestão.

Valeu,
Paulo

Use o método getSelectedItem().

 seuCombo.getSelectedItem()

A Paz!!

poste aqui para a comunidade!

Vejam,

aluno.setEstagio((Estagio) fieldEstagio.getSelectedItem());

Note que fiz um casting para poder rodar, se naum da erro, e na hora q mando gravar os dados aparecem estes erros:

Exception occurred during event dispatching:
java.lang.ClassCastException: java.lang.String
        at syslagg.jfrmAcademico.btnGravaActionPerformed(jfrmAcademico.java:715)
        at syslagg.jfrmAcademico.access$3300(jfrmAcademico.java:20)
        at syslagg.jfrmAcademico$26.actionPerformed(jfrmAcademico.java:546)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)
        at java.awt.Component.processMouseEvent(Component.java:5488)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
        at java.awt.Component.processEvent(Component.java:5253)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3955)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1766)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:153)
        at java.awt.Dialog$1.run(Dialog.java:515)
        at java.awt.Dialog.show(Dialog.java:536)
        at java.awt.Component.show(Component.java:1300)
        at java.awt.Component.setVisible(Component.java:1253)
        at syslagg.jfrmPrincipal.btnAcademicoActionPerformed(jfrmPrincipal.java:249)
        at syslagg.jfrmPrincipal.access$000(jfrmPrincipal.java:15)
        at syslagg.jfrmPrincipal$1.actionPerformed(jfrmPrincipal.java:124)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1849)
        at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2169)
        at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:420)
        at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:258)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:234)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:231)
        at java.awt.Component.processMouseEvent(Component.java:5488)
        at javax.swing.JComponent.processMouseEvent(JComponent.java:3093)
        at java.awt.Component.processEvent(Component.java:5253)
        at java.awt.Container.processEvent(Container.java:1966)
        at java.awt.Component.dispatchEventImpl(Component.java:3955)
        at java.awt.Container.dispatchEventImpl(Container.java:2024)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4212)
        at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3892)
        at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3822)
        at java.awt.Container.dispatchEventImpl(Container.java:2010)
        at java.awt.Window.dispatchEventImpl(Window.java:1766)
        at java.awt.Component.dispatchEvent(Component.java:3803)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:463)
        at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:234)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:163)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:157)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:149)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:110)

Tem mais alguma possivel solução.

Valeu,
Paulo

Pelo que vc colocou aqui:

Vc está adicionando uma Sring no Combo(fieldEstagio) e não um objeto Estagio.

Faça o seguinte, sobrescreva o toString() na sua classe estágio e adicione ela no Combo(fieldEstagio).

A Paz!!

Paulo,

Não entendi o q vc me falou, tem como me dar mais alguma dica, veja a minha classe Estagio

/**
 * Classe Estagio
 * Está classe é um bean que contém todos os tipo de estágio em que um aluno
 * pode estar participando
 **/
package syslagg.beans;

import java.io.Serializable;
import java.util.Collection;
import java.util.Set;
import javax.persistence.*;


@Entity(access=AccessType.FIELD)
@Table(name="Estagio")
@SequenceGenerator(name="SEQ_ESTAGIO", sequenceName="SEQ_ESTAGIO")
public class Estagio implements Serializable {

    @Id(generate=GeneratorType.SEQUENCE, generator="SEQ_ESTAGIO")
    private int id_estagio;
    
    @Column(name="nome", nullable=false, length=50)
    private String nome;
    
    @Column(name="descricao", nullable=false, length=255)
    private String descricao;
    
    /**
     * Criando um relacionamento entre as 
     * classes Estagio e Aluno
     **/
    @OneToMany(mappedBy="estagio")
    private Set<Aluno> alunos;
   
    public void setId (int id){
        this.id_estagio = id;
    }
    
    
    public int getId(){
        return this.id_estagio;
    }
    
    public void setNome(String nome){
        this.nome = nome;
    }

    
    public String getNome(){
        return this.nome;
    }
    
    public void setDescricao(String descricao){
        this.descricao = descricao;
    }
    
    
    public String getDescricao(){
        return this.descricao;
    }
}

Paulo

Adicione o seguinte método a sua classe:

public String toString(){ return nome; }

Então a partir disso ao invés de adicionar o nome do Estágio no Combo vc adiciona logo o objeto estágio. Daí o Combo vai chamar seu método sobrescrito(toString()) para ser mostrado.

Então seu código de inserção no Combo irá ficar assim:

public void PreencheEstagio(){ this.sessao = this.factory.openSession(); List lista_estagio = this.sessao.createQuery("from syslagg.beans.Estagio").list(); for(Object o : lista_estagio){ fieldEstagio.addItem(o); } this.factory.close(); }

A Paz!!