Pegar valor de JTextfield e passar pra outra Classe

Entao, eu estou quebrando a cabeca, tentando fazer um programa em Java, tipo um caixa eletronico, so que estou tentando pegar o valor digitado no Jtextfield da classe Telainicial e mostrar na tela de outra classe, ja criei as variaveis para pegar os valores no JTextField so que eu nao sei como eu faco para pegas os valores dessas variaveis e passar para outra classe e mostrar na tela. No caso o “nome” e o “numeroconta” que eu queria mostrar na classe TExtrato.

Classe Telainicial


public class Telainicial extends JFrame{ 
 
    JButton jbcancelar = new JButton("Cancelar");  
    JButton jbok = new JButton("Ok");
    
    JTextField jtnome = new JTextField();
    JTextField jtnumconta = new JTextField();
    String nome;
    String numeroconta;
    

    public Telainicial (){  

        super("Incial");  

        Container c = getContentPane();

        c.setLayout(new GridLayout(3,2));  
        c.add(new JLabel ("Nome:"));
        c.add(jtnome);

        c.add(new JLabel ("Numero da conta:"));  
        c.add(jtnumconta);  

        jbok.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){
		     nome = jtnome.getText();
		     numeroconta = jtnumconta.getText();
			 new TCaixa().show();
		     dispose();
			}
        });
        c.add(jbok);
        
        
        c.add(jbcancelar);



        setSize(300,200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);


    }
}

Classe TExtrato

public class TExtrato extends JFrame{  

    JButton jbvoltar = new JButton("Voltar");  
    JButton jbok = new JButton("ok");

    public TExtrato (){  


        super("Extrato");  

        Container c = getContentPane();  

        c.setLayout(new GridLayout(3,2));  
        c.add(new JLabel ("Nome:"));
        // nomee aqui
        
        c.add(new JLabel ("Numero da conta:"));
        // numero da conta aqui
        
        c.add(new JLabel ("Saldo atual:"));
        c.add(new JLabel ("Saques realizados hoje:"));
        
        jbok.addActionListener(new ActionListener() {
			@SuppressWarnings("deprecation")
			public void actionPerformed(ActionEvent e){
			new TCaixa().show();
		     dispose();
			}
        });
        c.add(jbok);
        
        jbvoltar.addActionListener(new ActionListener() {
			@SuppressWarnings("deprecation")
			public void actionPerformed(ActionEvent e){
			new TCaixa().show();
		     dispose();
			}
        });
        c.add(jbvoltar);



        setSize(300,200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);


    }
}

Olá MadK,

Você pode passar objetos como parâmetros na abertura de outra tela/classe. Para isso basta adicionar no construtor da classe de destino, parâmetros que você utilizará, no seu caso ficaria algo parecido com isto:

Class TExtrato extend JFrame{

public TExtrato( String nome, String numeroConta){
super(“Extrato”);

    Container c = getContentPane();  

    c.setLayout(new GridLayout(3,2));  
    c.add(new JLabel ("Nome: " + nome));
    // nomee aqui
    
    c.add(new JLabel ("Numero da conta: "+ numeroConta));
    // numero da conta aqui

//Restante do código omitido;

Na Tela principal, na hora de chamar a tela de extrato pelo clique do botão, basta passar os parâmetros que deseja:
jbok.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e){
nome = jtnome.getText();
numeroconta = jtnumconta.getText();
new TExtrato(nome, numeroconta).show();
dispose();
}
});

1 curtida

Entao, eu fiz oque vc falou na parte de cima
Passar os parametros no TExtrato(String nome, String numeroconta)…
E pus o

Container c = getContentPane();  

    c.setLayout(new GridLayout(3,2));  
    c.add(new JLabel ("Nome: " + nome));  <<<
    // nomee aqui
    
    c.add(new JLabel ("Numero da conta: "+ numeroConta)); <<<
    // numero da conta aqui

Eu queria so que pegasse esses nomes e quando eu abrisse a tela TExtrato iria mostrar na tela, so que na Telainicial ela nao deve abrir direto para a TExtrato ela vai para outra classe que e a TCaixa e dps que o usuario selecionair “Extrato” que ira abrir a “TExtrato” mostrando esses valores.Tipo como estava antes com o new TCaixa().show();
so que quando eu abro a tela TCaixa e clicko em TExtrato esta dando erro…

Este e o codigo das classes:

Classe TCaixa > Que apos eu digitar os valores na Telainicial abre esta Tela, e dela o usuario pode selecionar a TExtrato para abrir, so que esta dando erro quando clicko para abrir a TExtrato.

public class TCaixa extends JFrame{  

    JButton jbcancelar = new JButton("Cancelar");  
    JButton jbok = new JButton("ok");
    
    JButton jbsaque = new JButton("Saque");  
    JButton jbextrato = new JButton("Extrato");
    JButton jbdepositar = new JButton("Depositar");
    JButton jbtransferir = new JButton("Transferir");
    

    public TCaixa (){  


        super("Caixa");  

        Container c = getContentPane();

        c.setLayout(new GridLayout(3,2));
        
        jbsaque.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent s){
		     new TSacar().show();
		     dispose();
			}
        });
        c.add(jbsaque);
        
        jbextrato.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent a){
		     new TExtrato().show();
		     dispose();
			}
        });
        c.add(jbextrato);
        
        jbdepositar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent d){
		     new TDepositar().show();
		     dispose();
			}
        });
        c.add(jbdepositar);
        
        jbtransferir.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent t){
		     new TTransferir().show();
		     dispose();
			}
        });
        c.add(jbtransferir);

        jbok.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){
		     setVisible(true);
		     dispose();
			}
        });
        c.add(jbok);
        c.add(jbcancelar);



        setSize(300,200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);


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

Classe TelaInicial como esta:

public class Telainicial extends JFrame{  
    JButton jbcancelar = new JButton("Cancelar");  
    JButton jbok = new JButton("Ok");
    
    JTextField jtnome = new JTextField();
    JTextField jtnumconta = new JTextField();
    String nome;
    String numeroconta;
    

    public Telainicial (){  

        super("Incial");  

        Container c = getContentPane();

        c.setLayout(new GridLayout(3,2));  
        c.add(new JLabel ("Nome:"));
        c.add(jtnome);

        c.add(new JLabel ("Numero da conta:"));  
        c.add(jtnumconta);  

        jbok.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){
		     nome = jtnome.getText();
		     numeroconta = jtnumconta.getText();
			 new TCaixa().show();
		     dispose();
			}
        });
        c.add(jbok);
        
        
        c.add(jbcancelar);



        setSize(300,200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);


    }
}

Classe TExtrato

public class TExtrato extends JFrame{  

    JButton jbvoltar = new JButton("Voltar");  
    JButton jbok = new JButton("ok");

    public TExtrato (String nome, String numeroconta){  


        super("Extrato");  

        Container c = getContentPane();  

        c.setLayout(new GridLayout(3,2));  
        c.add(new JLabel ("Nome:" + nome));
        // nomee aqui
        
        c.add(new JLabel ("Numero da conta:" + numeroconta));
        // numero da conta aqui
        
        c.add(new JLabel ("Saldo atual:"));
        c.add(new JLabel ("Saques realizados hoje:"));
        
        jbok.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){
			new TCaixa().show();
		     dispose();
			}
        });
        c.add(jbok);
        
        jbvoltar.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e){
			new TCaixa().show();
		     dispose();
			}
        });
        c.add(jbvoltar);



        setSize(300,200);
        setDefaultCloseOperation(EXIT_ON_CLOSE);


    }
}

Bom nesse caso algumas perguntas que você deve analisar:

  1. Por que não usar banco para realizar esta ação, recuperar o usuário corrente da aplicação no banco de dados?
  2. Por que não usar singleton, e manter um objeto usuário único na aplicação? Nesse caso, cuidado com multiusuários na aplicaçao, caso esteja programando nesse sentido, pois a aplicação compartilhará a única instância do objeto.
  3. Sempre passar esses objetos sempre que abrir um novo frame? Não seria uma boa alternativa por conta do trabalho, mas funciona.
  4. Quando o usuário logar na aplicação, não poderia registrar o log num arquivo externo, e quando abrisse a tela ele verificaria quem é o usuário?