Como colocar um atributo especifico da Lista de Objetos no JComboBox JAVA?[RESOLVIDO]

Ola amigos , tenho uma dificuldade especifica,
sou iniciante,

Gostaria de colocar no JComboBox uma lista com apenas o nome dos objetos "gênero "

public class Genero {
    private int cod_genero;
    private String nome_genero;

    public int getCod_genero() {
        return cod_genero;
    }

    public void setCod_genero(int cod_genero) {
        this.cod_genero = cod_genero;
    }

    public String getNome_genero() {
        return nome_genero;
    }

    public void setNome_genero(String nome_genero) {
        this.nome_genero = nome_genero;
    }
    
}


consulta 

 public List<Genero> consultarGeneroNome() {
          List <Genero> listadeGenero = new ArrayList();
          ResultSet rs;
          Genero a;
          sSQL = "SELECT genero.nome_genero"
                  + "FROM genero ";
          try {           
              con   = Conection.getConexao();
              pstmt = con.prepareStatement(sSQL);
              rs    = pstmt.executeQuery();
              
 	      while (rs.next()){
                  a = new Genero();
                  
                  a.setNome_genero(rs.getString("nome_genero"));
                 
                  listadeGenero.add(a);  
              } 
              System.out.println("Consulta feita com exito!");
           rs.close();
           pstmt.close();
           con.close();
          } 
           catch (SQLException erro) {
             System.out.println("Erro ao consultar Genero - "+ erro.getMessage());
         } 
     
         return listadeGenero;
     }

Observe que retorno a lista de objetos genero, mas não faço ideia de como implementar a inserção do nome de genero de cada objeto no combobox quando a tela for iniciada,

Você não precisa inserir nada no JComboBox.
Você já inseriu os objetos Genero em um List.
Agora basta implementar um ComboBoxModel para o seu JComboBox renderizar esse List:

Faz uma inner class dentro de sua tela, conforme abaixo:

// ComboBoxModel para renderizar um List de objetos do tipo Genero
private class ComboBoxModelGenero extends DefaultComboBoxModel<String> {

    // O JComboBox vai chamar este método para renderizar os seus elementos
    @Override
    public String getElementAt(int index) {
        Genero genero = listadeGenero.get(index); // obtém o Genero da lista
        return genero.getNome_genero(); // retorna o seu nome
    }
}

Agora é só setar o modelo para o seu JComboBox:

meuJComboBox.setModel( new ComboBoxModelGenero() );
2 curtidas

public class ComboBoxModelGenero extends DefaultComboBoxModel {
@Override

public String getElementAt(int index) {

    Genero genero=new Genero();
    List <Genero> ListaGenero=new ArrayList();
    GeneroDAO g=new GeneroDAO();

    ListaGenero.addAll(g.consultarGeneroNome()); //essa função retorna uma lista de genero do banco.
    genero =ListaGenero.get(index); // obtém o Genero da lista 
    return genero.getNome_genero(); // retorna o seu nome
}

}

esta correto ? na tela em relação a setar

meuJComboBox.setModel( new ComboBoxModelGenero() );

esse treixo de codigo deu erro.

Você precisa ajustar o generics para ficar de acordo.

Posta o código completo da ViewCadastrarFilme, acho que você não entendeu que o modelo deveria ser uma inner class para enxergar a lista de Genero.

1 curtida

Realmente não sei o que é inner class vou postar o codigo

package Views.ViewsCrudFilme;

import DomainPackage.Filme;
import DomainPackage.Genero;
import PackageDAO.ComboBoxModelGenero;
import PackageDAO.FilmeDAO;
import PackageDAO.GeneroDAO;
import java.util.ArrayList;
import java.util.List;

public class ViewCadastrarFilme extends javax.swing.JInternalFrame {
public ViewCadastrarFilme() {
initComponents();

}

@SuppressWarnings("unchecked")
    
private void BTCadastrarActionPerformed(java.awt.event.ActionEvent evt) {                                            
    Filme Filme1 = new Filme();
    FilmeDAO Filme1DAO = new FilmeDAO();
    
    Filme1.setNome_filme(TFNome.getText());
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
    
}                                           

private void BTLimparActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
}                                        

private void TFNomeActionPerformed(java.awt.event.ActionEvent evt) {                                       
    // TODO add your handling code here:
}                                      

private void TFDiretorActionPerformed(java.awt.event.ActionEvent evt) {                                          
    // TODO add your handling code here:
}                                         

private void TFProdutoraActionPerformed(java.awt.event.ActionEvent evt) {                                            
    // TODO add your handling code here:
}                                           

private void CBGeneroActionPerformed(java.awt.event.ActionEvent evt) {                                         
    // TODO add your handling code here:
}                                        

private void TFProdutora1ActionPerformed(java.awt.event.ActionEvent evt) {                                             
    // TODO add your handling code here:
}                                            

}
ViewCadastrarFilme é um internal frame dentro do principal

Você não postou o código completo, ou postou o fonte errado, não há nenhum JComboBox no que você postou.

1 curtida

CBGenero

Colega, veja o código que você postou, não tem nenhum CBGenero.
Também não tem o código onde você usa o DAO para obter a lista de Genero.

/*Conseguir Resolver segue as instruções abaixo:

Basicamente no meu caso criei três Classes , famoso modelo Três camadas .

Dominio : com A classe Genero com seus atributos Getters e setters.:

pacote DAO : GeneroDAO contendo todas as funcionabilidades da classe genero. :

View : No meu caso tela desktop desejada o qual vai conter o JComboBox
*/
package DomainPackage;

public class Genero {
   
   private int cod_genero;
   private String nome_genero;

    public int getCod_genero() {
        return cod_genero;
     }

    public void setCod_genero(int cod_genero) {
        this.cod_genero = cod_genero;
    }

    public String getNome_genero() {
        return nome_genero;
    }

    public void setNome_genero(String nome_genero) {
         this.nome_genero = nome_genero;
    }

}
Classe GeneroDAO onde esta minha consulta SQL

public class GeneroDAO {
        String sSQL;
        Connection con;
        PreparedStatement pstmt;

  public List <Genero> consultarGeneroNome() {
      List <Genero> listadeGenero = new ArrayList();
      ResultSet rs;
      Genero a;
      sSQL = "SELECT genero.nome_genero"
              + " FROM genero ";
      try {           
          con   = Conection.getConexao();
          pstmt = con.prepareStatement(sSQL);
          rs    = pstmt.executeQuery();
          
      while (rs.next()){
              a = new Genero();
               a.setNome_genero(rs.getString("nome_genero"));
             listadeGenero.add(a);  
          } 
       System.out.println("Consulta feita com exito!");
       rs.close();
       pstmt.close();
       con.close();
      } 
       catch (SQLException erro) {
         System.out.println("Erro ao consultar Genero - "+ erro.getMessage());
     } 
     return listadeGenero;
 }

}

esse treixo de codigo é responsavel por inserir os dados da consulta do banco de dados no jcombobox.

essa região é no codigo fonte da tela na sua inicialização…

 public ViewCadastrarFilme() {    //codigo padrão de inicialização da tela
    initComponents();
    
       GeneroDAO g=new GeneroDAO();
    
       List <Genero> ListaGenero = new ArrayList();
       
        for(Genero g1: g.consultarGeneroNome()){
                CBGenero.addItem(g1.getNome_genero());      //adciona cada informação no jcombobox
        }
    
 }

Obrigado amigo por me ajudar , acabei encontrando solução , Obrigado pela ajuda de verdade.