Como detectar uma mudança no JComboBox em tempo real?
Estou fazendo dois ComboBox com Sala e nome dos alunos de uma determinada sala, como faço pra quando eu selecionar uma sala no primeiro combobox ele automaticamente carregar os alunos desta sala?
A isso dá-se o nome de combobox encadeados.
Os dados estão vindo de onde? Banco de dados? Como estão os seus métodos para popular os comboboxes?
Um trecho de código que tenho aqui…
1 - Pacote DAO
public static List<bean.Raca> pesquisar(short ordem, String parametro)
throws SQLException{
String tipoBusca;
List<bean.Raca> racas = new ArrayList<>();
switch(ordem){
case 0:
tipoBusca = "Racas.codigo_raca";
break;
case 1:
tipoBusca = "Racas.casta";
break;
case 2:
tipoBusca = "racas.especie";
break;
case 3:
tipoBusca = "racas.nome_raca";
break;
default:
tipoBusca = "Racas.codigo_raca";
}
try(Connection conectaBancoDeDados = ConectaBancoDeDados.getConexao()){
String stringSQLPesquisa = "SELECT * FROM Racas "
+ "WHERE " + tipoBusca + " LIKE '" + parametro + "%' "
+ "ORDER BY Racas.codigo_raca";
try(PreparedStatement pstmt = conectaBancoDeDados
.prepareStatement(stringSQLPesquisa)){
try(ResultSet rstSet = pstmt.executeQuery()){
while(rstSet.next()){
bean.Raca raca = new bean.Raca();
raca.setCodigoRaca(rstSet.getLong("codigo_raca"));
raca.setCasta(rstSet.getString("casta"));
raca.setEspecie(rstSet.getString("especie"));
raca.setNomeRaca(rstSet.getString("nome_raca"));
raca.setAlternativa(rstSet.getString("alternativa"));
racas.add(raca);
}
rstSet.close();
}
pstmt.close();
}
conectaBancoDeDados.close();
}
return racas;
}
2 - Pacote View
private static final short NUMERO_MINIMO_REGISTROS = 3;
private void cbxCastaAnimalItemStateChanged(java.awt.event.ItemEvent evt) {
carregarComboRacas(OPCAO_CASTA, cbxCastaAnimal.getSelectedItem()
.toString());
}
private void carregarComboRacas(short parametro, String argumento){
try{
racas = dao.Raca.pesquisar(parametro, argumento);
cbxRacaAnimal.removeAllItems();
cbxRacaAnimal.addItem("Selecione...");
for(bean.Raca raca : racas){
if(racas.size() < NUMERO_MINIMO_REGISTROS)
cbxRacaAnimal.setMaximumRowCount(NUMERO_MINIMO_REGISTROS);
else
cbxRacaAnimal.setMaximumRowCount(racas.size());
cbxRacaAnimal.addItem(raca.getNomeRaca());
}
}catch(SQLException sqle){
System.out.println("Impossível popular o combo com as raças. ERRO: "
+ sqle.getMessage());
}
}