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);
}
}
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();
}
});
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:
Por que não usar banco para realizar esta ação, recuperar o usuário corrente da aplicação no banco de dados?
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.
Sempre passar esses objetos sempre que abrir um novo frame? Não seria uma boa alternativa por conta do trabalho, mas funciona.
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?