jCombobox populando de acordo com a escolha de outro

Boa tarde a todos!

Pesquisei muito pra vir perguntar aqui no Forum. Seguinte:

Tenho tres jCombobox. O primeiro pega o codigo de uma empresa de um banco de dados. O segundo pega a empresa de outro banco e o terceiro pega a conta que por sinal é amarrada nessa empresa do combo anterior.
Acontece que eu queria que, ao selecionar a empresa, no combo 2, ja filtrasse as contas dessa empresa no combo 3.

Segue meu codigo.

 jComboBox1.removeAllItems();
        jComboBox2.removeAllItems();
        jComboBox3.removeAllItems();
        tabela1Dao tabela1 = new tabela1Dao();
        String select = //Codigo da empresa do banco 1
                "SELECT cod_empresa FROM tab_empresa"
                + " ORDER BY cod_empresa";
        String select2 = //Codigo da empresa do banco 2
                "SELECT cod_empresa FROM tab_empresa"
                + " ORDER BY cod_empresa";
        String select3 = //Conta da empresa do banco 2
                "SELECT a.seq_conta, b.nom_conta"
                + " FROM tab_ctb_conta_empresa a"
                + " INNER JOIN tab_ctb_conta b ON (a.cod_conta = b.cod_conta)"
                + " WHERE b.ind_complemento = 'CL'"              
                + " AND a.seq_conta in (SELECT c.seq_conta FROM tab_ctb_lancamento c WHERE c.seq_conta = a.seq_conta)"
                + " ORDER BY a.seq_conta";
        PreparedStatement stmt = null;
        PreparedStatement stmt2 = null;
        PreparedStatement stmt3 = null;
        try {
            stmt = tabela1.conexaoBanco2().prepareStatement(select);
            stmt2 = tabela1.getConnection().prepareStatement(select2);
            stmt3 = tabela1.conexaoBanco2().prepareStatement(select3);
            ResultSet rs = stmt.executeQuery();
            ResultSet rs2 = stmt2.executeQuery();
            ResultSet rs3 = stmt3.executeQuery();
            while (rs.next()) {
                jComboBox3.addItem(rs.getString(1));
            }
            while (rs2.next()) {
                jComboBox2.addItem(rs2.getString(1));
            }
            while (rs3.next()) {
                jComboBox1.addItem(rs3.getString(1));
            }
            jComboBox1.updateUI();
            jComboBox2.updateUI();
            jComboBox3.updateUI();
        } catch (SQLException ex) {
            Logger.getLogger(principal.class.getName()).log(Level.SEVERE, null, ex);
        }

Tente algo ± assim!

[code]import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.swing.JComboBox;

/**

  • ActionListener que povoa um comboBox vindo por parametro junto com a conexão durante um evento de outro comboBox.
  • Ou seja. o no seu jComboBox2 de um jComboBox2.addActionListener(jComboBox3, stmt3)
  • @author rafael.moreira

*/
public class JComboBoxListener implements ActionListener {

private JComboBox comboBox3;
private PreparedStatement stmt3;

public JComboBoxListener(JComboBox comboBox3, PreparedStatement stmt3) {
	this.comboBox3 = comboBox3;
	this.stmt3 = stmt3;
}

@Override
public void actionPerformed(ActionEvent arg0) {
	
	//Obter o comboBox que disparou o listener
	JComboBox comboBox2 = (JComboBox) arg0.getSource();
	
	//Pega o valor o combo.
	String parametroQry = (String) comboBox2.getSelectedItem();
	
	String select3 = "" + parametroQry; //Sya query que você busca a conta passando o nome que está escrito na seleção do combobox2;  
     		
	try {
		ResultSet resultSet = this.stmt3.executeQuery(select3);
		
		this.comboBox3.removeAllItems();
		
		while (resultSet.next()) {  
			this.comboBox3.addItem(resultSet.getString(1));  
        } 
		
		this.comboBox3.revalidate();
		this.comboBox3.repaint();
		//this.comboBox3.updateUI();
	} catch (SQLException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}  
}

}[/code]

Deu certo… valeu demais