[RESOLVIDO]Como usar o jComboBox?

Olá!
Estou utilizando códigos para cadastrar a partir de uma interface gráfica. estou trabalhando com Hibernate. Gostaria que me ajudassem.
Como faço para pegar os nomes dos autores numa jComboBox? Sendo que já existe autores cadastrados no banco.
Veja o código que usei para cadastrar:

[code] public Livro PrencherCamposLivro(Livro livro) {
livro.setTitulo(jTextField2.getText());
livro.setIsbn(Integer.valueOf(jTextField3.getText()));
livro.setNuExemplar(Integer.valueOf(jTextField4.getText()));
//Estou com dúvidas de como busco os autores no banco, já que uso collection do Hibernate.
livro.setAutorCollection(jComboBox1.getAction()));
return livro;
}

//Este código deve preencher os campos do exemplar quando o jRadioButton for selecionado.
public void CadastrarExemplar (){
ExemplarDAO.fabricaExemplarDAO().inserirExemplar(Integer.valueOf(jTextField4.getText()), new Exemplar());
ExemplarDAO.fabricaExemplarDAO().StatusEmprestimo(Short.MIN_VALUE, new Exemplar());
}

public void cadastrarLivro() {
    LivroDAO.fabricaLivroDAO().salvar(PrencherCamposLivro(new Livro()));
    CadastrarExemplar(); 
}

public void BuscarAutor (int CodAutor){
    Autor autor = AutorDAO.frabricaAutorDAO().findById(CodAutor);     
}[/code]

Ainda não testei os códigos porque preciso definir a lista de autores que o livro pode ter. E no botão cadastro apenas chamo o método CadastrarLivro();
Estou muito confusa com os códigos! Alguém pode me ajudar? Alguem tem alguma ideia de como tenho que organizar esses códigos?
Até. :wink:

Boa noite Jackye.

Olha, eu não uso o hibernate, porém eu costumo popular um JComboBox com dados do banco, utilizando uma classe chamada ComboBoxModel, eu creio eu que servirá pra você mesmo utilizando o hibernate, pois eu implemento esta classe para utilizar uma conexão direta com o banco e pegar os dados via SQL.

Dê uma olhada na dica que dei neste post.
http://www.guj.com.br/java/261022-jcombobox-pega-nome-e-jtextfield-retorna-id#1362476.

Um abraço.

discorpio!

Obrigada pela Dica!!
:thumbup:

Movido para o fórum de interface gráfica.

Olá! Segui as dicas do Post recomendado: http://www.guj.com.br/java/261022-jcombobox-pega-nome-e-jtextfield-retorna-id#1362476
Mas como faço pra preencher uma JTable quando o dado da combobox for selecionado??

Oi! :smiley:

Minha aplicação não tá buscando os nomes dos autores no JComboBox! :frowning:
O que eu faço?
Esta é minha classe que implementa o ComboBoxModel:

package Visao;

import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import javax.swing.ComboBoxModel;
import javax.swing.event.ListDataListener;

public class ListarAutorComboBox implements ComboBoxModel {
    
    private ArrayList<String> data = null;  
    private String selected_item = null;  
    private int index;  
      
    public ListarAutorComboBox (String column, String sql){  
        try {  
            data = new ArrayList<String>();  

            Class driver = Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");  
            String banco = "jdbc:sqlserver://localhost:1433;databaseName=dbTestesRegras";  
            DriverManager.registerDriver((Driver)driver.newInstance());  
            Connection conn = DriverManager.getConnection(banco,"sa","1a2b3c4d");  
            conn.setAutoCommit(true);  
  
            PreparedStatement stm = conn.prepareStatement(sql);                            
            ResultSet rs = stm.executeQuery();         
              
            data.add("Nome");  
            while(rs.next()){  
                data.add(rs.getString(column)); 
            }                               
            selected_item = data.get(0);                          
        }catch(Exception e){ 
            e.printStackTrace();
        }  
    }  

    public int getSelectedIndex(){  
        return index;  
    }  
  
    public void setSelectedIndex(int anIndex){  
        this.index = anIndex;  
    }  
  
    @Override  
    public void setSelectedItem(Object anItem) {  
        String item = (String)anItem;  
        selected_item = data.get(data.indexOf(item));  
        setSelectedIndex(data.indexOf(item));  
    }  
  
    @Override  
    public Object getSelectedItem() {  
        return selected_item;  
    }  
  
    @Override  
    public int getSize() {  
        return data.size();  
    }  
  
    @Override  
    public Object getElementAt(int index) {  
        return data.get(index);  
    }  
  
    @Override  
    public void addListDataListener(ListDataListener l) {  
        // Método não utilizado.  
    }  
  
    @Override  
    public void removeListDataListener(ListDataListener l) {  
        // Método não utilizado.  
    }      
}

No JComboBox da interface eu fiz o seguinte:

[code]jComboBox1 = new JComboBox(new ListarAutorComboBox(“Nome”,“Select Nome From Autor Order By Nome”));
jComboBox1.addItemListener(new ItemListener() {

        @Override
        public void itemStateChanged(ItemEvent e) {
          JComboBox jComboBox= (JComboBox)e.getSource();  
          //Aqui quero inserir numa table, mas nao sei como fazer isso.
        }
      });[/code]

Olá gente!

Gostaria que me explicassem o que estes metodos abstratos (são metodos que fazem parte da classe que implenta ComboBoxModel)fazem:

[code] @Override
public void addListDataListener(ListDataListener l) {
throw new UnsupportedOperationException(“Not supported yet.”);
}

@Override
public void removeListDataListener(ListDataListener l) {
    throw new UnsupportedOperationException("Not supported yet.");
}

[/code]

Olha, achei um jeito fácil de chamar os nomes a partir de um ComboBox:

List<Autor> autor; private void ListarAutor(){ Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); autor = session.createQuery("FROM Autor").list(); if (autor.isEmpty()){ JOptionPane.showMessageDialog(null, "Nenhum registro encontrado"); } else { jComboBox1.removeAllItems(); for (int i = 0; i < autor.size(); i++) { jComboBox1.addItem(autor.get(i).getNome()); } } session.close(); }

Depois é só chamar o método lá na parte do initComponets.

Uma melhoria disso seria o uso de classe parametrizada , também poderia receber uma coleção qualquer e uma facade para consulta ou outro meio qualquer para consulta.
Ou até mesmo objeto critéria para o Hibernate


package br.com.websart.teste;

import java.util.ArrayList;
import java.util.Collection;

import javax.swing.ComboBoxModel;
import javax.swing.event.ListDataListener;

public class NovoJComboBox<E>  implements ComboBoxModel{

	private  ArrayList<E> dados=null;
	private  int index;
	
	private  E selected_item = null;  
	
	public NovoJComboBox (Collection<E> lista){
		dados=new ArrayList<E>();
		for (E dado : lista) {
			dados.add(dado);
		}
	}
	
	public int getSelectedIndex(){  
        return index;  
    }  
  
    public void setSelectedIndex(int anIndex){  
        this.index = anIndex;  
    }  
	  
	@Override
	public Object getElementAt(int index) {
		return dados.get(index);
	}

	@Override
	public int getSize() {
		return dados.size();
	}


	@Override
	public Object getSelectedItem() {
		return selected_item;
	}

	@Override
	public void setSelectedItem(Object anItem) {
		 selected_item = (E)anItem;  
		 setSelectedIndex(dados.indexOf(anItem));
	}
	
	@Override
	public void removeListDataListener(ListDataListener arg0) {
        // TODO Auto-generated method stub
	}
	
	@Override
	public void addListDataListener(ListDataListener arg0) {
		// TODO Auto-generated method stub
	}

}

Para utilizar seria legal Criar um Decorator

Algo como:

[code]
public ClienteDecorator {

Cliente cli;

public ClienteDecorator(Cliente cli){
if(cli==null)
throw new IllegalArgumentException(“Objeto cliente não pode ser nullo”);
this.cli=cli;
}

@Override
public String toString() {
return cli.getNome() +" - "+cli.getTelContatoCli();
}

} [/code]