Dúvida sobre Objeto[Resolvido]

Desculpe se a duvida é ridícula.

Ex: Eu criei um Objeto func da classe Funcionario no Formulario1.

Queria saber se eu consigo passar as informações do Objeto func para um outro Objeto num Formulário2 por ex.

Obrigado.

como assim? seja mais especifico

Vo tentar explicar melhor.

Tenho dois formulários, Formulario1 e Fomulário2.

Tenho um Classe chamada Funcionario.

No Formulário1 criei um Objeto chamado func, da classe Funcionario

//Ex: Funcionario func = new Funcionario();

Até ae beleza.

Agora eu quero criar um Objeto no Formulario2 que receba todo o conteudo do Objeto func do Formulario1.

Deu pra entender?

Sim, pode.

Vc cria na outra classe um método que receba como parametro o objeto func e dai chama esse método onde tiver o objeto func preenchido com os dados.

Na outra classe algo tipo:

[code]public void pegaFunc(Funcionario func) {
Funcionario func2 = func;

}

// ou

public void pegaFunc(Funcionario func) {
Funcionario func2 = new Funcionario();
func2.setNome(func.getNome());

}[/code]

Dica:

  1. Ao invés de assinar o método como “pegaFunc”, assine como “setFuncionario”… É padrão, e fica mais fácil de outros desenvolvedores reconhecerem o método!

Você pode fazer desse modo como o romarcio disse, usando um método e setando o objeto Funcionario no Formulario2:

public class Formulario2 extends JDialog
{
   private Funcionario funcionario;
   public Formulario2()
   {
   }

   public void setFuncionario(Funcionario funcionario)
   {
      this.funcionario = funcionario;
   }
}

Ou, senão, passar pelo próprio construtor da classe:

public class Formulario2 extends JDialog
{
   private Funcionario funcionario;
   public Formulario2(Funcionario funcionario)
   {
      this.funcionario = funcionario;
   }
}

Para chamar os exemplos:

public class Formulario1 extends JDialog
{
   private transient JButton chamarFormularioButton;
   public Formulario1()
   {
      chamarFormularioButton = new JButton("Chamar Segundo Formulário");
      chamarFormularioButton.addActionListener( new ActionListener() {

         public void actionPerformed(ActionEvent e)
         {
            Funcionario funcionario = new Funcionario();
            funcionario.setNome( "Zé das Couves" );

            // Para o primeiro exemplo...
            Formulario2 formulario2 = new Formulario2();
            formulario2.setFuncionario( funcionario );

            // Para o segundo exemplo...
            Formulario2 formulario2 = new Formulario2( funcionario );
         }
      });
   }
}

Basicamente por aí!
Abraços!

Ainda estou com dúvidas.

Me corrija se eu estiver errado, você fez o que eu queria só que em uma mesma tela de código não foi?

Eu fiz um exemplo simple pra ver se da pra entender melhor

eu tenho o Formulario 1:

public class Formulario1 extends javax.swing.JFrame {

    public Formulario1() {
        initComponents();

        Funcionario func = new Funcionario();

        func.setNome("Julio");
    }
}

Formulario2 (outra tela):

public class Formulario2 extends javax.swing.JFrame {

    public Formulario2() {
        initComponents();

        Funcionario func2 = new Funcionario();

        System.out.println(func2.getNome());
    }

e a Classe Funcionario:


public class Funcionario {

    private String nome;

    Funcionario() {
    }

    void setNome(String nome) {

        this.nome = nome;
    }

    String getNome() {
        return nome;
    }
}

Dessa maneira o atributo “nome” do Objeto func do Formulario1 está recebendo “Julio”.

O Objeto func2 do Formulario2 está vazio, apenas foi criado.

Agora eu quero, de alguma forma que o Objeto func2(do Formulário2) receba tudo do func(Formulário1) como se eu estivesse usando o mesmo Objeto mas em Formulários diferente.

Obs: eu estou usando o IDE NetBeans, não sei se isso muda alguma coisa.

Tente colocar o funcionario como atributo de instancia dos seus formularios:

private Funcionario  funcionario

Depois coloque getters e setter para ele (em ambos os formularios).
Quando for criar os formularios faça algo assim:

formulario1.setFuncionario(formulario2.getFuncionario);

isso se chama injeção de dependências via setter, e é um antipadrão.

O padrão seria criar o funcionário Júlio fora dos formulários, e inserir ele nos dois via contrutor;
algo assim:

Funcionario julio = new Funcionario();
julio.setNome("Julio");

Formulario1 form1 = new Formulario1(julio);
Formulario2 form2 = new Formulario2(julio);

isso resolve.

[quote=juliocesarss]Ainda estou com dúvidas.

Me corrija se eu estiver errado, você fez o que eu queria só que em uma mesma tela de código não foi?

Eu fiz um exemplo simple pra ver se da pra entender melhor

eu tenho o Formulario 1:

public class Formulario1 extends javax.swing.JFrame {

    public Formulario1() {
        initComponents();

        Funcionario func = new Funcionario();

        func.setNome("Julio");
    }
}

Formulario2 (outra tela):

public class Formulario2 extends javax.swing.JFrame {

    public Formulario2() {
        initComponents();

        Funcionario func2 = new Funcionario();

        System.out.println(func2.getNome());
    }

e a Classe Funcionario:


public class Funcionario {

    private String nome;

    Funcionario() {
    }

    void setNome(String nome) {

        this.nome = nome;
    }

    String getNome() {
        return nome;
    }
}

Dessa maneira o atributo “nome” do Objeto func do Formulario1 está recebendo “Julio”.

O Objeto func2 do Formulario2 está vazio, apenas foi criado.

Agora eu quero, de alguma forma que o Objeto func2(do Formulário2) receba tudo do func(Formulário1) como se eu estivesse usando o mesmo Objeto mas em Formulários diferente.

Obs: eu estou usando o IDE NetBeans, não sei se isso muda alguma coisa.
[/quote]

A IDE não importa na questão… O que acontece é problemas de transferência de dados para você, ou seja, lógica! =)
Vamos lá…

Este é o seu formulário 1:

public class Formulario1 extends javax.swing.JFrame {

    public Formulario1() {
        initComponents();

        Funcionario func = new Funcionario();

        func.setNome("Julio");
    }
}

Você criou a tela e criou um objeto funcionário, com o nome Júlio.
Vamos fazer algumas alterações aqui:

public class Formulario1 extends JFrame 
{
    private Funcionario funcionario; // crie o objeto como uma variável privada, para eu sempre ter uma referência do objeto.

    public Formulario1() 
    { 
        initComponents();
        funcionario = new Funcionario();
        funcionario.setNome( "Julio" );
    }
}

Agora, você criou o formulário 2:

public class Formulario2 extends javax.swing.JFrame {

    public Formulario2() {
        initComponents();

        Funcionario func2 = new Funcionario();

        System.out.println(func2.getNome());
    }
}

Printou NULL, certo?
Mas porque isso? Porque você não atribuiu valor alguma ao funcionário 2.
Vamos fazer outra alteração nesse formulário:

public class Formulario2 extends JDialog // Dica: só o formulário principal como JFrame, use o resto como JDialog.
{
    private Funcionario funcionario; // novamente, use uma variável privada.

    /* Tá vendo que eu passei uma variável no construtor? O que eu quis com isso? No momento em que criar uma instância do Formulario 2, eu devo passar um funcionário pra ele, e nada melhor para garantir que seja feito que pelo construtor, que vai exigir o funcionário como parâmetro.*/
    public Formulario2( Funcionario funcionario ) 
    {
        initComponents();
        // Agora, eu seto meu funcionario desse formulário com o objeto que recebi pelo construtor:
        this.funcionario = funcionario;
        // Agora sim funciona o Sysout!
        System.out.println( this.funcionario.getNome() );
    }
}

Beleza… E como fica o formulário 1?

public class Formulario1 extends JFrame 
{
    private Funcionario funcionario; // crie o objeto como uma variável privada.

    public Formulario1() 
    { 
        initComponents();
        funcionario = new Funcionario();
        funcionario.setNome( "Julio" );
        
        // Quando eu criar uma instância do formulário 2, ele obriga a passar um funcionário como parâmetro!
        Formulario2 form = new Formulario2(funcionario);
        form.setVisible(true);
    }
}

Assim, você criou uma dependência entre esses dois formulários!
Agora testa para você ver!
Deu pra entender legal?

Abraços!

Double post, apaga esse aqui, por favor!

Consegui Nicolas. E entendi como funciona.

Agora só adaptar ao meu projeto.

Vlw