Dúvida sobre Objeto[Resolvido]

9 respostas
juliocesarss

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.

9 Respostas

tinorberto

como assim? seja mais especifico

juliocesarss

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?

romarcio

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:

public void pegaFunc(Funcionario func) {
    Funcionario func2 = func;
    ... 
}

// ou

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

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!

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.

edwlipe

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.

Nicolas_Fernandes

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.

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!

Nicolas_Fernandes

Double post, apaga esse aqui, por favor!

juliocesarss

Consegui Nicolas. E entendi como funciona.

Agora só adaptar ao meu projeto.

Vlw

Criado 13 de outubro de 2010
Ultima resposta 14 de out. de 2010
Respostas 9
Participantes 5