jCombobox populando de acordo com a escolha de outro

2 respostas
M

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);
        }

2 Respostas

R

Tente algo +- assim!

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();
		}  
	}
}
M

Deu certo… valeu demais

Criado 9 de abril de 2012
Ultima resposta 11 de abr. de 2012
Respostas 2
Participantes 2