Srs, boa noite!
Estou com dificuldades de capturar dados usando GUI.
Tenho uma classe seu nome é ATM. Ela foi criada com objetivo de gerenciar entrada de dados e validação e á classe Layout onde eu estou tratando meus componentes GUI.
Estou tratando layout com um relacionamento do tipo( tem um ) em ATM. Ou seja estou usando o conceito de “composição”.
Classe ATM:
private boolean userAuthenticated; //Se usuário foi autenticado
private int currentAccountNumber; //Número atual da conta de usuário
private CashDispenser cashDispenser; //Dispensador para depósito do ATM
private DepositSlot depositSlot; //Abertura para depósito do ATM
private BankDatabase bankDatabase; //Banco de dados com as informações sobre as contas
private Layout layout; /LayoutGUI do ATM
//Construtor
public ATM()
{
userAuthenticated = false; //Usuário não foi autenticado para iniciar
currentAccountNumber = 0; //Nenhum número atual de conta para iniciar
cashDispenser = new CashDispenser(); //Cria o dispensador de células ( Instância de Objetos )
depositSlot = new DepositSlot(); //Cria a abertura para depósito ( Instância de Objetos )
bankDatabase = new BankDatabase(); //Cria o banco de dados com informações sobre contas ( Instância de Objetos )
layout = new Layout();
Tenho um método que tem função de autenticar o usuário conforme dados oriundos da classe Layout.
private void authenticateUser()
{
int accountNumber = layout.getInputNumConta();
screen.displayMessage( "\nEnter your PIN:" ); //Solicita o PIN
int pin = keypad.getInput(); //Insere o PIN
//Configura userAuthenticated com um valor boolean retornado pelo banco de dados
userAuthenticated =
bankDatabase.authenticateUser( accountNumber, pin );
//Verifica se a autenticação foi bem-sucedida
if( userAuthenticated )
{
currentAccountNumber = accountNumber; //Salva a conta do usuário #
}
else
screen.displayMessageLine(
"Invalid account number or PIN. Please try again" );
}//Fim do método authenticateUser
Minha dificuldade está exatamente aqui********
Observei que quando o construtor carrega os dados á variável ( accountNumber ) recebe um valor antes do método getInputNumConta ser executado na classe Layout. O registro é validado antes que usuário digite em tela.
Se alguém puder me ajudar, eu agradeço antecipadamente.
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;
import javax.swing.JOptionPane;
import java.awt.FlowLayout;
import javax.swing.JOptionPane;
public class Layout extends JFrame
{
private JLabel labelPassword; //Label do campo senha
private JTextField fieldPassword; //Campo de texto para senha
private JButton buttonOK; //Botão de validação
private int numConta = 0;
//Construtor
public Layout()
{
super( "Numero da conta" );
System.out.print("Construtor");
setLayout( new FlowLayout() ); //Configura o layout para nulo
//Constrói um Label
labelPassword = new JLabel( "Número da Conta" );
labelPassword.setBounds( 1, 1, 35, 35 );
add( labelPassword ); //Adiciona campo no layout
//Constrói um Field
fieldPassword = new JTextField( 10 );
fieldPassword.setBounds( 80, 10, 100, 20 );
add( fieldPassword ); //Adiciona campo no layout
//Constrói botão
buttonOK = new JButton( "Confirmar" );
buttonOK.setVisible( true );
add( buttonOK );
buttonOK.addActionListener(
new ActionListener() //Classe anônima
{
String conta;
//Trata evento de botão
public void actionPerformed( ActionEvent event )
{
conta = fieldPassword.getText();
numConta = Integer.parseInt( conta );
setVisible( false );
}
}
);
setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
setSize( 200, 200 );
setVisible( true );
}//Fim do construtor
//Captura e retorna número da conta
public int getInputNumConta()
{
return numConta;
}
}//Fim classe