Dúvidas sobre como criar um model para combobox

7 respostas
S

Bom dia galera,

Queria pedir mais uma vez a ajuda dos amigos no seguinte, gostaria de exibir meus dados de uma determinada classe em um combobox, antigamente eu fazia isso diretamente na camada view do meu programa e já conectava ao banco e chamava um resultset retornando os dados, porem, como agora estou aprendendo a trabalhar em camadas com os amigos, tenho observado que assim como o JTable utiliza um TableModel para exibição e manipulação dos dados da tabela, o combobox também utiliza de um Model, portanto, queria dar uma olhada com os amigos se alguem teria um exemplo bem explicado para que eu pudesse entender como utiliza-lo em minha aplicação.

Desde já agradeço a ajuda de todos!!!

7 Respostas

freakazoid

sebastian, vc provavelmente esta usando JSP. Você pode fazer usando scriptles <%%> ou o JSTL.

Para usar o JSTL é preciso importar a lib no seu projeto e na pagina jsp fazer o importe com tag lib abaixo:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<select name="cidade">  
   <c:forEach items="${countries}" var="cidade">  
       <option value="${cidade.id}">${cidade.nome}</option>  
   </c:forEach>  
</select>

Esta sessão da apostila da Caelum pode lhe sanar algumas possíveis duvidas.

Abs!

S

Boa tarde Freakazoid

Na verdade é um programa para desktop mesmo, segue abaixo meu código referente ao model_combobox, acabei pegando de alguem aqui do forum mesmo como exemplo, porem, agora estou na dúvidas sobre como chama-lo na minha view.

public class ComboModel_Cargos extends DefaultComboBoxModel { 
  
   private ArrayList<Cargos> names = null;  
     
   public ComboModel_Cargos(ArrayList<Cargos> names) {  
      this.names = names;  
   }  
     
   @Override  
   public void addElement(Object anObject) {  
      this.names.add((Cargos)anObject);  
      //notifica o combo que o modelo foi alterado.  
      this.fireIntervalAdded(this, 0, 0);  
   }  
  
    @Override
   public Object getElementAt(int index) {  
      return this.names.get(index);  
   }  
  
    @Override
   public Object getSelectedItem() {  
      return super.getSelectedItem();  
   }  
  
    @Override
   public int getSize() {  
      return this.names.size();  
   }

Desde já obrigado por qualquer ajuda.

freakazoid

sebastian, vou ficar de devendo cara. As poucas vezes que programei pra desktop foi em C#…

Uma dica: altere o nome do seu post e inclua a palavra “desktop”, fica mais pra galera te ajudar. E caso encontre a solução poste aqui pra gente. :wink:

Abs!

vininewday

Na hora que você vai instânciar o JComboBox você passa sua classe de modelo para o construtor dele, da seguinte maneira:

ClasseDeModeloBox modelo = new ClasseDeModeloBox(); JComboBox combo = new JComboBox(modelo);

E no seu método:

@Override public Object getElementAt(int index) { return this.names.get(index); }

Você deve retornar uma String, pois este será o valor que aparecerá na combo.

S

Boa tarde galera,
Tentei da forma que vc me falou Vininewday, só q acabou não funcionando, vou te mostrar como está meu código no momento só para vc tentar me ajudar melhor por favor.

Minha TAbleModel_Cargos

public class ComboModel_Cargos extends DefaultComboBoxModel { 
  
   //private ArrayList<Cargos> names;  
   private List<Cargos> names;
     
  // public ComboModel_Cargos(ArrayList<Cargos> names) {  
    //  this.names = names;  
  // }

    public ComboModel_Cargos(List<Cargos> RetornaCargos) {
        this.names = RetornaCargos; 
    }
   
 //  public ComboModel_Cargos() {  
   //   this.names = new ArrayList<>();
  // }
     
   @Override  
   public void addElement(Object anObject) {  
      this.names.add((Cargos)anObject);  
      //notifica o combo que o modelo foi alterado.  
      this.fireIntervalAdded(this, 0, 0);  
   }  
  
   //public Object getElementAt(int index) {  
   public Object getElementAt(String index) {  
     return this.names.get(Integer.parseInt(index));
     //     return this.names.get(index);
   }  
  
    @Override
   public Object getSelectedItem() {  
      return super.getSelectedItem();  
   }  
  
    @Override
   public int getSize() {  
      return this.names.size();  
   }

Minha DAO que tem um metodo para chamar os dados do bd e retornar pra view

public List<Cargos> RetornaCargos() {
         String sql  = "Select * from Cargos";  
         PreparedStatement stmt;    
        try {
            stmt = connection.prepareStatement(sql);
            ResultSet rs = stmt.executeQuery();  
    
          while(rs.next()){  
            Cargos cargo = new Cargos();
            cargo.setTipo(rs.getNString("tipo"));
            dados_cargos.add(cargo);
         }   
       } catch (SQLException ex) {
            Logger.getLogger(CadastrarDadosIgrejaDAO.class.getName()).log(Level.SEVERE, null, ex);
        }
         return dados_cargos;  
     }

Minha view, evento q ocorre logo quando o form é carregado, que seria para carregar todos os dados do BD no combobox cargo.

model = new ComboModel_Cargos(new CadastrarMembroDAO().RetornaCargos());  
 cbCargo.setModel(model);

Eu não estou conseguindo entender o q tá faltando para que os dados sejam exibidos na combobox, caso alguem possa me ajudar, vou ficar super grato com os colegas.

S

Poxa vida galera, será que não teria alguém pra me dar uma ajudinha não???

B

Tenta implementar um ComboBoxModel no lugar de estender um DefaultComboBoxModel.

Criado 8 de março de 2013
Ultima resposta 12 de mar. de 2013
Respostas 7
Participantes 4