JComboBox que carrega quando a informação de outro JComboBox é alterada

Se possível eu gostaria de uma breve explicação de como funcionariam estes eventos dos ComboBox;
O Exemplo é o seguinte:

ComboBox1 é carregado com uma série de estados por exemplo;
ComboBox2 é carregado com uma série de cidades conforme o selectedItem do ComboBox1;

ai eu queria que quando alterasse o selectedItem do ComboBox1(estados) o ComboBox2(cidades) re-executasse o método que ele tem, que faz a busca pelas cidades conforme o selectedIitem do ComboBox1(estados).

valeu ai pessoal, já procurei na internet encontrei um exemplo só não conseguir fazer funcionar neste meu exemplo para 2 ComboBox, eu não entendi onde colocaria o método que eu já tenho, o exemplo está aqui:

[code]// Create component
String[] items = {“item1”, “item2”};
JComboBox cb = new JComboBox(items);
cb.setEditable(true);

// Create and register listener
MyActionListener actionListener = new MyActionListener();
cb.addActionListener(actionListener);

class MyActionListener implements ActionListener {
// Retain the previously selected item in order to determine whether
// the new item is the same
Object oldItem;

// This method is called whenever the user or program changes the selected item.
// Note: The new item may be the same as the previous item.
public void actionPerformed(ActionEvent evt) {
    JComboBox cb = (JComboBox)evt.getSource();

    // Get the new item
    Object newItem = cb.getSelectedItem();

    // Determine if different from previously selected item
    boolean same = newItem.equals(oldItem);
    oldItem = newItem;

    if ("comboBoxEdited".equals(evt.getActionCommand())) {
        // User has typed in a string; only possible with an editable combobox
    } else if ("comboBoxChanged".equals(evt.getActionCommand())) {
        // User has selected an item; it may be the same item
    }
}

}
[/code]

brigadão

vc está usando o evento errado.

usa o itemStateChanged

//isto é o que vc implementa em cada radio
			comboBox.addItemListener(new java.awt.event.ItemListener() {
				public void itemStateChanged(java.awt.event.ItemEvent e) {

				}
			});

ai toda vez que o combo mudar vc captura com o getSelectedItem e repassa o texto pra nova pesquisa.

e joga no outro combo.

Poxa não consegui, só meio sou muito novato hehe, vou precisar de um desenho heuheuehu
olha só, coloquei um ItemStateChanged nele simplesmente coloquei meu método que faz as buscas, pois dentro do método eu capturo o getSelected, só que pelo que estou vendo não está buscando, ele até da uma travada, acredito que porque está consultando o banco mas meus Combos não trazem os novos resultados esperados :(, estão ai os códigos, eles falam melhor que eu hehe

[code] popularPais();
DefaultComboBoxModel modeloP = new DefaultComboBoxModel(this.pais);
jcbPais.setModel(modeloP);

popularEstado();
DefaultComboBoxModel modeloE = new DefaultComboBoxModel(this.estado);
jcbEstado.setModel(modeloE);

popularMunicipio();
DefaultComboBoxModel modeloM = new DefaultComboBoxModel(this.municipio);
jcbMunicipio.setModel(modeloM);[/code]

private void jcbPaisItemStateChanged(java.awt.event.ItemEvent evt) { popularEstado(); jcbPais.updateUI(); jcbEstado.updateUI(); }

private void jcbEstadoItemStateChanged(java.awt.event.ItemEvent evt) { popularMunicipio(); jcbEstado.updateUI(); jcbMunicipio.updateUI(); }

[code] public String popularEstado() {
Pais tmpP = (Pais) jcbPais.getSelectedItem();

    try {
        Conexao c = new Conexao();
        Connection con = c.conexaoMysql();
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM Estados WHERE idPais = '" + tmpP.getIdPais() + "';");

        while (rs.next()) {
            Estado e_ = new Estado();
            e_.setIdPais(rs.getString("idPais"));
            e_.setIdEstado(rs.getString("idEstado"));
            e_.setDescricao(rs.getString("Descricao"));
            this.estado.add(e_);
            
            jcbEstado.updateUI();
        }
        return null;

    } catch (Exception ex) {
        JOptionPane.showMessageDialog(this, ex + "\nErro ao conectar ao Servidor de banco de dados! Falha ao carregar Estados! \nVerifique as Configurações de Conexão.");
        return null;
    }
}[/code]

[code] public String popularMunicipio() {
Estado tmpE = (Estado) jcbEstado.getSelectedItem();

    try {
        Conexao c = new Conexao();
        Connection con = c.conexaoMysql();
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM Municipios WHERE idEstado = '" + tmpE.getIdEstado() + "';");

        while (rs.next()) {
            Municipio m_ = new Municipio();
            m_.setIdMunicipio(rs.getString("idMunicipio"));
            m_.setIdEstado(rs.getString("idEstado"));
            m_.setDescricao(rs.getString("Descricao"));
            this.municipio.add(m_);
            
            jcbMunicipio.updateUI();
        }
        return null;

    } catch (Exception ex) {
        JOptionPane.showMessageDialog(this, ex + "\nErro ao conectar ao Servidor de banco de dados! Falha ao carregar Cidades! \nVerifique as Configurações de Conexão.");
        return null;
    }
}[/code]

bom com isso o que eu entendo/espero!? seguinte, minha tela carrega e já executa pelo menos uma vez todos os métodos “popular”, depois disso caso eu mude um item ele irá executar o ItemStateChanged que por sua vez irá executar o método “popular” referente ao que for mudado, Ex.: Alterei o Estado, ocorre um ItemStateChanged no combo Estado o que dispara o popularMunicipio(); !? Certo !? O que acontece é que quando vou testar, a lista do combo não é atualizada, não sei se estou fazendo corretamente :confused:

desde já um muito Obrigado!! e um feliz dia das crianças xD

eu não costumo usar Model pra combo.

o que faço é trazer um List<?> do que eu quero em algum momento do primeiro combo.

depois quando este primeiro combo muda de estado.

eu capturo o texto e jogo num metodo de busca que vai me trazer outro List<?>.

então eu apago os valores do combo 2 (combo2.removeAllItens())e reconstruo ele com o meu list novo.

o metodo de mudança está sempre no primeiro combo. e quem faz o trabalho de contruir os dados do segundo combo
será sempre o primeiro.

Geralmente o List que eu faço é um List de Strings.