Another solution would be to use the comboModel . Simple example:
public class AulaComboModel extends AbstractListModel<Aula> implements ComboBoxModel<Aula> {
private List<Aula> lista;
/* Seleciona um objeto na caixa de seleção */
private Aula selecionado;
/* Método construtor */
public AulaComboModel() {
/* Popula a lista */
popular();
/* Define o objeto selecionado */
setSelectedItem(lista.get(0));
}
/* Captura o tamanho da listagem */
public int getSize() {
int totalElementos = lista.size();
return totalElementos;
}
/* Captura um elemento da lista em uma posição informada */
public Aula getElementAt(int indice) {
Aula t = lista.get(indice);
return t;
}
/* Marca um objeto na lista como selecionado */
public void setSelectedItem(Object item) {
selecionado = (Aula) item;
}
/* Captura o objeto selecionado da lista */
public Object getSelectedItem() {
return selecionado;
}
private void popular() {
try {
/* Cria o DAO */
AulaDAO tdao = new AulaDAO();
/* Cria um modelo vazio */
Aula t = new Aula();
t.setNomeUsuario("");
/* Recupera os registros da tabela */
lista = tdao.buscar(t);
/* Cria o primeiro registro da lista */
Aula primeiro = new Aula();
primeiro.setIdUsuario(0);
primeiro.setNomeUsuario("--SELECIONE UM USUARIO--");
/* Adiciona o primeiro registro a lista */
lista.add(0, primeiro);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
In this comboModel
I retrieve the records from the database as follows: lista = tdao.buscar(t);
To implement this comboModel it is necessary to override the method equals
and toString
Do this in the model, example:
@Override
public String toString() {
String texto = idUsuario+" - "+ nomeUsuario;
return texto;
}
@Override
public boolean equals(Object obj) {
Aula f = (Aula) obj;
return Objects.equals(this.idUsuario, f.idUsuario);
}
Note that no toString
is concatenating the id and name.
If you are using netBeans, go to the comboModel component, right-click and go to properties > model > custom code and then instantiate the created template: new AulaComboModel()
Thiswouldbeaslightly"bigger" solution to your problem, but using comboModel
can make your code more organized.