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!!!
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!
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.
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. 
Abs!
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.
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.
Poxa vida galera, será que não teria alguém pra me dar uma ajudinha não???
Tenta implementar um ComboBoxModel no lugar de estender um DefaultComboBoxModel.