Acessar conteudo de Component

Como eu faço pra guardar e acessar o conteudo digitado dentro de um JTextField sem que esse acesso seja feito pela classe em que o JTextField foi criado?Segue o código e o erro que dá

[code]
public class Cadastro extends javax.swing.JFrame {
MyAction acao;
public Cadastro() {
initComponents();
acao = new MyAction();
jButton1 = new javax.swing.JButton(acao);
getContentPane().add(jButton1);
jButton1.setBounds(60, 150, 90, 20);
}

private void initComponents() {
jLabel1 = new javax.swing.JLabel();
t_nome = new javax.swing.JTextField();

    getContentPane().setLayout(null);

    addWindowListener(new java.awt.event.WindowAdapter() {
        public void windowClosing(java.awt.event.WindowEvent evt) {
            exitForm(evt);
        }
    });

    jLabel1.setText("Nome:");
    getContentPane().add(jLabel1);
    jLabel1.setBounds(20, 100, 41, 16);

    getContentPane().add(t_nome);
    t_nome.setBounds(60, 100, 250, 20);

    pack();
    java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
    setSize(new java.awt.Dimension(400, 300));
    setLocation((screenSize.width-400)/2,(screenSize.height-300)/2);
}
 
            
private void exitForm(java.awt.event.WindowEvent evt) {
    System.exit(0);
}

public static void main(String args[]) {
    new Cadastro().show();
}

private javax.swing.JButton jButton1;
private javax.swing.JLabel jLabel1;
public javax.swing.JTextField t_nome;

}[/code]
Classe que gera a ação do botão

import java.awt.event.*;
import java.awt.*;
import javax.swing.*;


public class MyAction extends AbstractAction { 
    Bean b = new Bean();
    Cadastro t = new Cadastro();  
    
    public MyAction() { 
       putValue(SHORT_DESCRIPTION, "Teste"); 
      } 

      public void actionPerformed(ActionEvent e) { 
            b.setNome(t.t_nome.getText()); // aqui eu tento gravar o dado digitado no Bean
            
            System.out.println(b.getNome()); // aqui eu tento ver o dado foi gaurdado dentro do Bean
}
}
public class Bean {
String nome;
/**
 * Returns the nome.
 * @return String
 */
public String getNome() {
	return nome;
}

/**
 * Sets the nome.
 * @param nome The nome to set
 */
public void setNome(String nome) {
	this.nome = nome;
}

}[/code]
esse é o erro que gera
[code]java.lang.StackOverflowError
        at sun.awt.windows.WComponentPeer.getToolkit(WComponentPeer.java:398)
        at java.awt.Component.getToolkitImpl(Component.java:820)
        at java.awt.Component.getToolkitImpl(Component.java:824)
        at java.awt.Component.getToolkitImpl(Component.java:824)
        at java.awt.Component.getToolkitImpl(Component.java:824)
        at java.awt.Component.getToolkitImpl(Component.java:824)
        at java.awt.Component.getToolkit(Component.java:810)
        at java.awt.Component.addNotify(Component.java:5360)
        at java.awt.Container.addNotify(Container.java:1997)
        at javax.swing.JComponent.addNotify(JComponent.java:4270)
        at java.awt.Container.addNotify(Container.java:2004)
        at javax.swing.JComponent.addNotify(JComponent.java:4270)
        at java.awt.Container.addNotify(Container.java:2004)
        at javax.swing.JComponent.addNotify(JComponent.java:4270)
        at java.awt.Container.addNotify(Container.java:2004)
        at javax.swing.JComponent.addNotify(JComponent.java:4270)
        at javax.swing.JRootPane.addNotify(JRootPane.java:658)
        at java.awt.Container.addNotify(Container.java:2004)
        at java.awt.Window.addNotify(Window.java:410)
        at java.awt.Frame.addNotify(Frame.java:479)
        at java.awt.Window.pack(Window.java:428)
        at Cadastro.initComponents(Cadastro.java:46)
        at Cadastro.<init>(Cadastro.java:15)
        at MyAction.<init>(MyAction.java:18)
        at Cadastro.<init>(Cadastro.java:16)

Agradeço qualquer ajuda

Num to intendendo porque que não consigo imprimir o conteudo de setNome() por aqui

public class MyAction extends AbstractAction { 
    Bean b = new Bean(); 
    
    public MyAction() { } 

      public void actionPerformed(ActionEvent e) {

     System.out.println(b.nome); [b]Quanto eu tento imprimir o conteudo dessa maneira não aparece nada, eu fiz teste de tentar imprimir pela  classe cadastro e imprimiu, não sei, mas parece que o acesso ao conteudo de setNome só é permitido uma vez depois ele é apagado, ou seja não há persistência.[/b] E agora quem poderá me ajudar?


} 
} 

Luiz,

Eu modifiquei o seu código. Procurei não mudar muita coisa mas notei algumas falhas importantes, como declarar a variável t_nome como sendo pública. Isto quebra o encapsulamento e toda a vantagem de querer usar um Bean é jogada fora. Não creio que o Bean deva ser criado dentro da classe Cadastro (vc não fez isto mas tb não funcionava), então eu criei uma nova classe com o nome Principal que é uma JFrame e o Cadastro passou a ser um JPanel. Dessa maneira o Bean fica independente da classe Cadastro e pode ser usado em outros lugares.

[code]import java.awt.*;

public class Principal extends javax.swing.JFrame {

private Bean myBean;
private Cadastro cadastro;

public Principal() { 
    myBean = new Bean();
    initComponents(); 
} 

private void initComponents() {
    cadastro = new Cadastro(myBean); 
    getContentPane().add(cadastro, BorderLayout.CENTER); 

    addWindowListener(new java.awt.event.WindowAdapter() { 
        public void windowClosing(java.awt.event.WindowEvent evt) { 
            exitForm(evt); 
        } 
    }); 

    pack(); 
    java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize(); 
    setSize(new java.awt.Dimension(400, 300)); 
    setLocation((screenSize.width-400)/2,(screenSize.height-300)/2); 
} 
  
            
private void exitForm(java.awt.event.WindowEvent evt) { 
    System.exit(0); 
} 

public static void main(String args[]) { 
    new Principal().setVisible(true); 
} 

}[/code]

[code]public class Cadastro extends javax.swing.JPanel{

private javax.swing.JButton jButton1; 
private javax.swing.JLabel jLabel1; 
private javax.swing.JTextField t_nome;    
private Bean myBean;

public Cadastro(Bean myBean) { 
    MyAction acao;
    
    initComponents(); 
    this.myBean = myBean;
    acao = new MyAction(myBean, t_nome); 
    jButton1 = new javax.swing.JButton(acao); 
    add(jButton1); 
    jButton1.setBounds(60, 150, 90, 20); 
} 

private void initComponents() { 
    jLabel1 = new javax.swing.JLabel(); 
    t_nome = new javax.swing.JTextField(); 

    setLayout(null); 

    jLabel1.setText("Nome:"); 
    add(jLabel1); 
    jLabel1.setBounds(20, 100, 41, 16); 

    add(t_nome); 
    t_nome.setBounds(60, 100, 250, 20); 

} 

}[/code]

[code]public class Bean {
String nome;
/**

  • Returns the nome.
  • @return String
    */
    public String getNome() {
    return nome;
    }

/**

  • Sets the nome.
  • @param nome The nome to set
    */
    public void setNome(String nome) {
    this.nome = nome;
    }

}[/code]

[code]import java.awt.event.;
import java.awt.
;
import javax.swing.*;

public class MyAction extends AbstractAction {
Bean myBean;
JTextField myTextField;

public MyAction(Bean myBean, JTextField myTextField) { 
   putValue(SHORT_DESCRIPTION, "Teste"); 
   this.myBean = myBean;
   this.myTextField = myTextField;
} 

  public void actionPerformed(ActionEvent e) { 
        myBean.setNome(myTextField.getText()); // aqui eu tento gravar o dado digitado no Bean 
        
        System.out.println(myBean.getNome()); // aqui eu tento ver o dado foi gaurdado dentro do Bean 
  } 

}
[/code]

Mas um detalhe, se vc quer realmente que a sua aplicação Swing rode bem em qualquer plataforma, vc tem que usar LayoutManagers. É difícil de aprender, mas vale a pena. :wink:

Como eu amo as mulheres!!! :roll:
Brincadeirinhas a parte

Obrigado Leila, fico agradecido por ter arrumado o código e apontado meus erros.

Olá, como vão?
Deswculpe me intrometer :oops: Mas tenho uma pergunta que não quer calar:
como resolver um StackOverflowError?

[quote=“samurai”]Olá, como vão?
Deswculpe me intrometer :oops: Mas tenho uma pergunta que não quer calar:
como resolver um StackOverflowError?[/quote]

Ter cuidado com chamadas recursivas :wink:

Rafael