Dúvida com troca de valores entre janelas

6 respostas
MarceloRodrigues

Boa noite pessoal!

Estou desenvolvendo um projeto para a faculdade onde preciso criar um terminal de caixa eletrônico.

É bem simples, uma classe PRINCIPAL (main) instância a classe LOGIN.
A classe LOGIN instância a classe CADCONTACOR que contém um array da classe CONTACOR (é como se a CADCONTACOR fosse a tabela ‘cadastro_conta_corrente’).
Ao confirmar um login a classe LOGIN instancia a classe TERMINAL que tem apenas 3 botões: Sacar, Transferência e Saldo. Cada botão abre uma nova janela/classe.
Ao clicar em Saldo fiz com que a classe mostre um JOptionPanel com o atributo saldo da conta principal (a que foi validada no login).

Minhas dúvidas são:

-Como faço pra enviar o saldo da conta principal do terminal (conta que foi feito o login) para as classes Sacar e Transferência?;
-Como atualizar o saldo desta mesma conta depois depois de sacar ou transferir?;

Seguem minhas classes:

TERMINAL

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

public class Terminal extends JFrame {

    private JLabel			lblTitulo;
    private JButton			btnTransferencia;
    private JButton			btnSacar;
    private JButton			btnSaldo;
    private ContaCor		contaPrincipal;
    private CadContaCor		cadContas;
    private Saque			sPrincipal;

    public Terminal(ContaCor cPrincipal, CadContaCor cCadContas) {
    	
    	this.contaPrincipal = cPrincipal;
    	this.cadContas = cCadContas;
    	this.getContentPane().setLayout(null);
        this.getContentPane().setBackground(new Color(255, 255, 255));
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        this.setSize(new java.awt.Dimension(497, 284));
        this.setLocation((screenSize.width-497)/2,(screenSize.height-284)/2);
        this.setTitle("Caixa Eletrônico - Terminal");
        this.setResizable(false);


        lblTitulo = new JLabel("ESCOLHA UMA OPÇÃO!");
        lblTitulo.setBounds(new Rectangle(171, 6, 140, 26));
        this.getContentPane().add(lblTitulo, null);
        btnTransferencia = new JButton("Transferência");
        btnTransferencia.setBounds(new Rectangle(16, 66, 137, 47));
        this.getContentPane().add(btnTransferencia, null);
        btnSacar = new JButton("Sacar");
        btnSacar.setBounds(new Rectangle(328, 66, 137, 47));
        this.getContentPane().add(btnSacar, null);
        btnSacar.addMouseListener (new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
            	sPrincipal = new Saque();
            }
        	}
        );
        btnSaldo = new JButton("Saldo");
        btnSaldo.setBounds(new Rectangle(16, 145, 137, 47));
        this.getContentPane().add(btnSaldo, null);
        btnSaldo.addMouseListener (new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
            	contaPrincipal.obterSaldo();
            }
        	}
        );

        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                aoFechar();
            }
        });
        this.setVisible(true);
    }

    private void aoFechar() {
        System.exit(0);
    }

    // Insira aqui os métodos para os eventos

    /*public static void main(String args[]) {
    	ContaCor cc = new ContaCor(2611, 0001, "1234", "123456789", "José da Silva", 750.00);
    	Terminal t = new Terminal();
    }*/
}

TRANSFERÊNCIA

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

public class Transferencia extends JFrame {

	private JLabel		lblValor;
    private JTextField	txtValor;
    private JLabel		lblTitulo;
    private JLabel		lblAgencia;
    private JLabel		lblConta;
    private JTextField	txtAgencia;
    private JTextField	txtConta;
    private JButton		btnTransferir;

    public Transferencia() {

    	this.getContentPane().setLayout(null);
        this.getContentPane().setBackground(new Color(255, 255, 255));
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        this.setSize(new java.awt.Dimension(329, 303));
        this.setLocation((screenSize.width-329)/2,(screenSize.height-303)/2);
        this.setTitle("Caixa Eletrônico - Transferência");
        this.setResizable(false);
        
        lblValor = new JLabel("Valor");
        lblValor.setBounds(new Rectangle(63, 31, 46, 13));
        this.getContentPane().add(lblValor, null);
        txtValor = new JTextField();
        txtValor.setBounds(new Rectangle(151, 24, 100, 21));
        this.getContentPane().add(txtValor, null);
        lblTitulo = new JLabel("           Conta de crédito");
        lblTitulo.setBounds(new Rectangle(78, 81, 162, 20));
        this.getContentPane().add(lblTitulo, null);
        lblAgencia = new JLabel("Agência");
        lblAgencia.setBounds(new Rectangle(72, 143, 57, 13));
        this.getContentPane().add(lblAgencia, null);
        lblConta = new JLabel("Conta");
        lblConta.setBounds(new Rectangle(72, 175, 57, 13));
        this.getContentPane().add(lblConta, null);
        txtAgencia = new JTextField();
        txtAgencia.setBounds(new Rectangle(139, 137, 100, 21));
        this.getContentPane().add(txtAgencia, null);
        txtConta = new JTextField();
        txtConta.setBounds(new Rectangle(139, 168, 100, 21));
        this.getContentPane().add(txtConta, null);
        btnTransferir = new JButton("Transferir");
        btnTransferir.setBounds(new Rectangle(111, 212, 100, 30));
        this.getContentPane().add(btnTransferir, null);
        btnTransferir.addMouseListener (new MouseAdapter() {
            public void mouseClicked(MouseEvent e) {
                // Chamada a um método
            }
        });
        
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                aoFechar();
            }
        });
        this.setVisible(true);
    }

    private void aoFechar() {
        System.exit(0);
    }

    // Insira aqui os métodos para os eventos

    public static void main(String args[]) {
        new Transferencia();
    }
}

SAQUE

// Importa os pacotes necessários
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class Saque extends JFrame {

    private JLabel		lblValor;
    private JTextField	txtValor;
    private JButton		btnOK;
    
    public Saque() {

    	this.getContentPane().setLayout(null);
        this.getContentPane().setBackground(new Color(255, 255, 255));
        java.awt.Dimension screenSize = java.awt.Toolkit.getDefaultToolkit().getScreenSize();
        this.setSize(new java.awt.Dimension(336, 189));
        this.setLocation((screenSize.width-336)/2,(screenSize.height-189)/2);
        this.setTitle("Caixa Eletrônico - Saque");
        this.setResizable(false);


        lblValor = new JLabel("Valor");
        lblValor.setBounds(new Rectangle(72, 49, 57, 13));
        this.getContentPane().add(lblValor, null);
        txtValor = new JTextField();
        txtValor.setBounds(new Rectangle(116, 42, 128, 21));
        this.getContentPane().add(txtValor, null);
        btnOK = new JButton("OK");
        btnOK.setBounds(new Rectangle(115, 89, 100, 30));
        this.getContentPane().add(btnOK, null);
        this.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                aoFechar();
            }
        });
        this.setVisible(false);
    }

    private void aoFechar() {
        System.exit(0);
    }

    // Insira aqui os métodos para os eventos

    public static void main(String args[]) {
        new Saque();
    }
}

6 Respostas

MarceloRodrigues

Utilizei o programa Cafeteria para criar as janelas por isso o código saiu um pouco junto.

Existem ainda as classes LOGIN, PRINCIPAL, CONTACOR e CADCONTACOR mas não tem nenhum segredo nelas pois a parte principal do programa mesmo é o terminal.

Em transferência a conta principal deve passar uma quantia a uma outra conta do CADCONTACOR e em saque apenas deve subtrair uma quantia da conta principal.

Já agradeço.

alberthy

[b]Amigo.

Você inicia tela por tela é isso ? Vejo que o método main está em todas as classes.

Que tal você iniciar o Terminal e de acordo com a escolha do usuário ele mostrar as outras telas ? Já sabe criar os eventos para seus botões ? Procure por ActionListener.

Com essa interface, você poderá dar funcionalidades aos seus botões, tipo:[/b]

if (botaoClicado == saque){ // código para iniciar tela de saque. }

[b]Pegue uma apostila de Java Básico, as da Caelum são ótimas.

Abraço.[/b]

MarceloRodrigues

Não conheço actionlistener ainda. E o método main em todas classes é criado pelo Cafeteria e eu deixo porque da pra testar a classe, mas eu comentei o método main de todas as classes e deixei a classe principal como o main, essa classe apenas instancia um objeto da classe LOGIN.

FabricioPJ

Não sei se é a melhor prática, mas o que eu faço para passar um valor de um frame para outro é usar uma variável estática e pública. Por exemplo, se eu quero que um resultado obtido no frame Frame01 seja exibido no frame Frame02, eu crio uma variável publica e estática no Frame01, e no Frame02, eu a chamo da seguinte forma: “Frame01.minhaVariavel”.

R_chieck

Reforço: utilize listeners…

MarceloRodrigues

Deixa ver se eu entendi, eu crio um objeto CONTACOR como public static na classe TERMINAL e quando o usuario clicar no botão saque e realizar um saque da conta informando o valor esse valor é tirado diretamente do objeto CONTACOR da classe TERMINAL?

Criado 14 de junho de 2012
Ultima resposta 15 de jun. de 2012
Respostas 6
Participantes 4