Como chamar um objeto

1 resposta
A

Olá Comunidade!!!
Galera estou com problema e não estou conseguindo resolver, é assim;
Tenho uma classe chamada Pai que quando inicia o form pede o nome do Usuario, depois quando clicar em ok e abrira um outro form da classe chamda Filho.
Quando Abrir o outro form tem um botão ok, que quando clicado ele deveria pegar o valor do usuario digitado no primeiro form(pai) e mostrar em uma caixa de dialogo, mas ele me retorna um erro, alguem poderia me ajudar, segue o codigo abaixo:

[color=red]___________________________________________________________[/color]
[color=blue]
// Pai.java

import java.awt.<em>;

import javax.swing.</em>;

import java.awt.event.*;
public class Pai extends JFrame implements ActionListener{

public JTextField txtusuario;

public String     usuario;

public JButton    btn;

private Container cont;

private JPanel    painel1;
public Pai(){
          super("Digite seu Nome");
          BorderLayout layout = new BorderLayout();
          cont = getContentPane();
          cont.setLayout(layout);

          painel1  = new JPanel(new FlowLayout(FlowLayout.LEFT));

          txtusuario = new JTextField(20);
          painel1.add(txtusuario, BorderLayout.WEST);

          JButton btn = new JButton("OK");
          painel1.add(btn);
          btn.addActionListener(this);

          cont.add(painel1);

          setLocationRelativeTo(null);
          setResizable(false);
          setSize(300,170);
          setVisible(true);
    }

    public static void main(String args[]) {
           new Pai();
    }
    public void actionPerformed(ActionEvent e) {
           if (e.getActionCommand() == "OK")  PegarValor();
    }

    public void PegarValor() {
           Filho filho = new Filho();
    }
[/color]

[color=green] //nao sei se é este o jeito de fazer._____[/color][color=blue]

public void getUsuario(){    //retorna o usuario

usuario = txtusuario.getText();

}

}[/color]

[color=red]___________________________________________________________[/color]

[color=green]
//Filho.java

import java.awt.<em>;

import javax.swing.</em>;

import java.awt.event.*;
public class Filho extends JFrame implements ActionListener {

private JButton botao;

Pai pai;

private Container cont;

private JPanel painel;
public  Filho(){
          cont = getContentPane();
          BorderLayout layout = (new BorderLayout());
          cont.setLayout(layout);

          painel = new JPanel(new FlowLayout(FlowLayout.LEFT));

          botao = new JButton("Pegar Usuario do Pai");
          botao.addActionListener(this);
          painel.add(botao);

          cont.add(painel);

          setSize(300,300);
          setResizable(false);
          setVisible(true);
          setLocationRelativeTo(null);
    }
    public void actionPerformed(ActionEvent e){
           if (e.getSource() == botao) Retornar();
    }
[/color]

[color=blue]//<strong><strong>acho que o problema esta aqui</strong></strong>_______[/color][color=green]

public void Retornar() {[/color] [color=blue]       //pega Usuario  do Pai, mas nao estou conseguindo fazer isto[/color][color=green]

pai.PegarValor();

JOptionPane.showMessageDialog(null, pai.usuario);

}

}[/color]
[color=black]

Ele da um erro no Form2 e fala que a variavel Usuario está vazia.

Alguem por favor poderia me ajudar…

Muito obrigado,
Adriano[/color]

1 Resposta

O

olá, é o seguinte:

como você não modelou em OO, não é minha meta explicar no momento como modelar em OO, mas fiz uma "gambiarra", vamos lá:


na classe Pai:

coloque os dois atributos como estáticos:

public static JTextField txtusuario; 
public static String usuario;

e também coloque como estáticos nos dois métodos:

public static void PegarValor() { 
Filho filho = new Filho(); 
} 

//nao sei se é este o jeito de fazer._____ 
public static void getUsuario(){ //retorna o usuario 
usuario = txtusuario.getText(); 
} 
}

na classe Filho:

no método Retornar() adicione a chamada do método de pegar o valor digitado:

//____acho que o problema esta aqui___________ 
public void Retornar() { //pega Usuario do Pai, mas nao estou conseguindo fazer isto 
pai.PegarValor();
pai.getUsuario(); <-- adicionado aqui 
JOptionPane.showMessageDialog(null, pai.usuario); 
}

Assim funciona bem, o caso do erro que era que vc. chamava
o método da classe Pai sem ter instanciado ela, por isso coloquei
como estático, porque ai não precisar criar uma instância da classe Pai
para chamar o método.

Acho que ajudei…
qq. coisa posta ai!!!

falows! 8) :smiley:

Criado 22 de abril de 2006
Ultima resposta 22 de abr. de 2006
Respostas 1
Participantes 2