[RESOLVIDO] Dúvida ao fazer duas ComboBox em java

Olá gente, estou tentando criar duas combobox e pegar os dados do Banco.
Captura%20de%20Tela%20(76)

O primeiro é o departamento, e daí o segundo vai ser os produtos do departamento que eu selecionei acima. O departamento eu consigo fazer certinho, o segundo também faz a busca corretamente, coloca no combo box, só que não consigo fazer com que quando eu clique no DEPARTAMENTO automaticamente já apareça os produtos, e se eu mudar o departamento atualize os produtos tbm, sem que dê erro.

@Override
    public void actionPerformed(ActionEvent ae) {
        selected = String.valueOf(boxDepartment.getSelectedItem());
        System.out.println("View: "+selected);
        
        try {
            iv.ListProd(selected);
            boxProduct = new JComboBox((new
            DefaultComboBoxModel(iv.ListProd(selected).toArray())));
            
        } catch (SQLException ex) {
            Logger.getLogger(NewInput.class.getName()).log(Level.SEVERE, null, ex);
        }

        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
});

Desse jeito acima não da certo.

e o jeito abaixo funciona, só que somente uma vez, e a tela inicia sem o combo box, só aparece depois que eu escolho a categoria, e em seguida da erro.

@Override
    public void actionPerformed(ActionEvent ae) {
        selected = String.valueOf(boxDepartment.getSelectedItem());
        System.out.println("View: "+selected);
        
        try {
            iv.ListProd(selected);
                boxProduct = new JComboBox((new
                DefaultComboBoxModel(iv.ListProd(selected).toArray())));
                boxProduct.addActionListener(this);
                boxProduct.setSize(170,25); // LARGURA X ALTURA ** TAMANHO
                boxProduct.setLocation(105,50); // LARGURA X ALTURA ** LOCALIZAÇÃO
                add(boxProduct);
            
        } catch (SQLException ex) {
            Logger.getLogger(NewInput.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
});
add(boxDepartment);

Alguém sabe resolver?

Oi, seja bem-vinda ao fórum.

Vamos lá, partindo da ideia de que, se você não tem nenhuma bala, você não pode me oferecer 5. Com o Combox é a mesma coisa, ele não consegue mostrar algo que não tem.

Este método abaixo é pra preencher um JComboBox.

public void preencherCombo(String SQL, JComboBox combo, String coluna) {
    conecta.conexao();
    conecta.executaSQL(SQL);
    try {
        combo.removeAllItems();
        conecta.rs.first();
        do {
            combo.addItem(conecta.rs.getString(coluna));
            combo.setSelectedItem(null);
        } while (conecta.rs.next());
    } catch (SQLException ex) {
        //JOptionPane.showMessageDialog(null, "Erro ao receber dados");
        ex.printStackTrace();
    }
    conecta.desconecta();
}

Agora se você quer selecionar algo e passar pra o próximo combo, vc só precisa passar isso:

if(combo1.getSelectedItem().equals("Filé")){
   combo2.addItem("item_que_vc_quiser");
}

O comboBox tem um evento de ItemStateChanged, caso você ele tenha alguma alteração, realiza o evento.

Obrigada Abner, deu certo aqui

boxDepartment = new JComboBox((new
DefaultComboBoxModel(iv.ListDep().toArray())));
boxDepartment.setSize(170,25); 
boxDepartment.setLocation(105,20); 
boxDepartment.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent ae) {
        selected = String.valueOf(boxDepartment.getSelectedItem());
        
        try {
            ArrayList<String> c = new ArrayList();
            c = (ArrayList<String>) iv.ListProd(selected); // Recebo a lista do banco de dados
            for (int i=0; i < c.size(); i++){
            boxProduct.addItem(c.get(i)); // Adiciono os ítens na segunda ComboBox
            }
            
             
        } catch (SQLException ex) {
        }
    }
});
add(boxDepartment);
2 curtidas