Comunicação entre janelas [resolvido]

Olá…

Tenho uma janela principal e uma janela de cadastro (Jan_Principal.java) e (Jan_Cadastro_Produto.java)… Dentro da janela principal eu tenho uma comboBox que será alimentado com os itens cadastrados na janela de cadastro:

[code] public void AlimentarComboProdutosPrincipal() {
int i;

    combo_gasto_prod.removeAllItems();

    for (i = 0; bd.produtos[i] != null; i++) {
        combo_gasto_prod.addItem(bd.produtos[i].getNome() + " - " + bd.produtos[i].getLoja());
    }
}[/code]

Obs: nao estou utilizando banco de dados ainda… uma classe “bd” que é estática

Só que esse método está sendo chamado apenas no construtor do programa… Ou seja, os produtos que eu cadastrar após o programa não aparecem na comboBox…Eis o código de cadastro:

[code] private void botaoCadProdutoActionPerformed(java.awt.event.ActionEvent evt) {

    try {
        if(combo_Lojas.getSelectedItem().toString().equals("")){
           JOptionPane.showMessageDialog(null, "Selecione uma loja válida!");
        }else{
        Produto p = new Produto(combo_cad_prod_unid.getSelectedItem().toString(),bd.lojas[combo_Lojas.getSelectedIndex()].getNome(), campo_Cad_Nome.getText(), Double.parseDouble(campo_Cad_Preco.getText()));
        bd.produtos[bd.countProdutos] = p;
        bd.countProdutos++;
        JOptionPane.showMessageDialog(null, "Cadastro realizado com sucesso!");
        }
    } catch (Exception e) {
        JOptionPane.showMessageDialog(null, "Verifique os dados entrados");
    }
}[/code]

Eu precisaria de chamar o método de Jan_Principal (AlimentarComboProdutosPrincipal) nesta janela, para que alimente a combo… Porém não da certo… A “Jan_Principal” é também a classe principal do projeto, substitui:

public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new Jan_Principal().setVisible(true); } }); }

por:

[code] public static void main(String args[]) {

    Jan_Principal Jprincipal = new Jan_Principal();
    Jprincipal.setVisible(true);

}[/code]

Para tentar manipular a objeto como “Jprincipal” na outra janela e tentar executar o método ao fazer:

Jprincipal.AlimentarComboProdutosPrincipal();

Porem também nao deu certo… Alguma solução?

Abraços

sempre que editar alguma coisa, eliminar ou adicionar e querer que ele apareça na tela, você terá que criar um método q será acionado por qualquer outra ação já criada na sua tela, esse método volta a pegar tudo do seu banco e recarrega na janela, assim o que você mudou, já estará disponível.
então… toda ação de remover, editar e incluir alguma coisa na tela, chamará o método que recarrega tudo novamente, praticamente vai recarregar o método que vc colocou no construtor.

[quote=daquinho]sempre que editar alguma coisa, eliminar ou adicionar e querer que ele apareça na tela, você terá que criar um método q será acionado por qualquer outra ação já criada na sua tela, esse método volta a pegar tudo do seu banco e recarrega na janela, assim o que você mudou, já estará disponível.
então… toda ação de remover, editar e incluir alguma coisa na tela, chamará o método que recarrega tudo novamente, praticamente vai recarregar o método que vc colocou no construtor.[/quote]

eu criei esse método que é o alimentar combo… Ou eu não entendi o que voce quis dizer ou voce nao leu o tópico… O problema é quandoo chamar esse método… Precisaria de colocar dentro do actionperformed de quando clicar no botão cadastrar… porem, como eu disse, nao da pra chamar esse método la da janela principal!

obrigado pela resposta

Não sei se entendi sua duvida, mas se você quer acessar esse método AlimentarComboProdutosPrincipal() em uma outra janela é só passar a referencia da Janela principal onde esta o método para a janela auxiliar a partir da onde quer executar o método…
Exemplo:
Na classe Jan_Principal na hora de instanciar o objeto do tipo Jan_Cadastro_Produto, poderia passar a referencia do objeto de tipo Jan_Principal por meio do construtor ou por um método…

Jan_Cadastro_Produto janCadastroProduto = new Jan_Cadastro_Produto(this); //Por meio do construtor, usando a palavra "this"...

ou

janCadastroProduto.setReferenciaJanPrincipal(this);//Por meio do método... 

Ja na classe Jan_Cadastro_Produto você pode fazer assim…

Jan_Principal janPrincipal; ... puclic Jan_Cadastro_Produto(Jan_Principal principal){ //O construtor recebe por parametro a referencia do objeto da Janela principal... ... this.janPrincipal = principal; //Atribui a referencia para a variável janPrincipal. ... } ... janPrincipal.AlimentarComboProdutosPrincipal() //Assim podera invocar o método AlimentarComboProdutosPrincipal() a partir de qualquer locar da janela de cadastro. ...

[quote=Francisco Silva]Na classe Jan_Principal na hora de instanciar o objeto do tipo Jan_Cadastro_Produto, poderia passar a referencia do objeto de tipo Jan_Principal por meio do construtor ou por um método…
[/quote]

A melhor e mais simples solução… Como não pensei nisso antes? Muito obrigado Francisco Silva, você mandou muito bem! Resolveu 100% meu problema!

Um abraço!