Passar objeto de um form para outro

4 respostas
S

Pessoal

Preciso de ajuda:
Estou trabalhando em uma aplicação desktop. e preciso pegar um objeto de um form em outro form.

Tenho um objeto cliente no form frmCadCliente, dou um setVisible false e chamo um frmFiltroCliente de onde pego o objeto cliente (instanciado em frmCadCliente) usando o metodo getCliente do frmCadCliente.

Após isto chamo o frmPrincipal, e de onde preciso pegar o mesmo objeto cliente instanciado… como posso fazer isto? Alguém tem alguma idéia?

Valeu!

4 Respostas

D

Eu tenho uma solução não muito “bonita” para isso, mas que funciona…

Quando voce instanciar o frmFiltroCliente voce passa no construtor a instancia do seu frmCadCliente… Algo tipo assim:

Classe frmFiltroCliente:

public class frmFiltroCliente {

private frmCadCliente frm;

public frmFiltroCliente(frmCadClient frm) {
this.frm=frm;
}

}

dae na classe frmCadCliente vc vai ter:

public class frmCadCliente {

public void chamaNovoFrame() {
this.setVisible(false);
frmFiltroCliente frame = new frmFiltroCliente(this);
frame.setVisible(true);
}

}

Bom… com isso vc vai ter a instancia do frmCadCliente lá na sua classe frmFiltroClient e vai poder acessar os objetos da classe frmCadCliente…

OBS: eu digitei os codigos apenas pra exemplificar e podem existir erros de digitação que não compilariam… Utilize-os apenas como ilustração do que eu estava dizendo

S

cara beleza… assim funciona… mas meu problema eh diferente… nao me expressei direito…

tenho 3 forms (e eles sao instaciados na seguinte sequencia.
frmPrincipal > frmClienteCad >filtroCliente.

o frmClienteCad instancia o “cliente” e quando instancio o filtroCliente utilizao o metodo getCliente para pegar o objeto neste novo form… Após isto dou um setVisible(false) no filtroCliente e retorno ao meu frmPrincipal (que já instanciado)… mas como posso pegar o objeto cliente no frmPrincipal, se ele já esta instanciado… nao tenho como passar o frm no construtor dele pois ele jah esta instanciado…

Valeu!!!

shison

Olá, também não sei se é a resposta mais elegante porém funciona.
Você pode passar a referência do frmPrincipal em frente até chegar no filtroCliente. Então deste último, chame um método previamente definido em frmPrincipal que recebe a referência do Cliente.

ex:

class frmPrincipal { public void resposta(Cliente cliente_) { ... } private void abreClienteCad() { new frmClienteCad(this); } } class frmClienteCad { private frm; public frmClienteCad(frmPrincipal frm_) { frm = frm_ } private void abreFiltro() { new filtroCliente(frm); } } class filtroCliente { private frm; public frmClienteCad(frmPrincipal frm_) { frm = frm_ } private voltaPrincipal(Cliente cliente_) { frm.resposta(cliente_); }

Seguindo esta lógica você pode gerar uma classe abstrata para extender todos os forms, e já definir o atributo da tela anterior e o método resposta que invés de receber um Cliente pode receber um Object, que então é só usar casts ou aplicar o Generics.
Aí é com você =)

shison

poxa essa caixinha do code já era assim mesmo? tá maneirinha destaca até palavras reservadas :smiley:

Criado 4 de setembro de 2007
Ultima resposta 4 de set. de 2007
Respostas 4
Participantes 3