import java.awt.GridBagLayout;
import java.awt.GridBagConstraints;
import java.awt.CardLayout;
import java.awt.FlowLayout;
import java.awt.Button;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.TextArea;
import java.awt.TextField;
import java.awt.Insets;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class AccountInteractionFrame extends Frame
{
private BankMachine _bankMachine;
private BankAccount _bankAccount;
private Label _prompt = new Label( "Please enter the requested information." );
private Label _balance = new Label( "" ),
_interestRate = new Label( "" );
private TextField _name = new TextField(""),
_password = new TextField(""),
_credit = new TextField( "0.0" ),
_debit = new TextField( "0.0" );
private Panel _panelHolder = new Panel(), // the panel used to hold either of the next two panels
_loginPanel = new Panel(),
_interactionPanel = new Panel();
public AccountInteractionFrame( BankMachine bankMachine ) {
_bankMachine = bankMachine;
setTitle( "Account Interaction" );
setLayout( new GridBagLayout() );
GridBagConstraints gbc;
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.weighty = 1.0;
gbc.weightx = 1.0;
gbc.fill = GridBagConstraints.BOTH;
gbc.insets = new Insets( 4,4,4,4 );
add( _prompt, gbc );
_panelHolder.setLayout( new CardLayout() );
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.weightx = 1.0;
gbc.insets = new Insets( 4,4,4,4 );
gbc.fill = GridBagConstraints.BOTH;
add( _panelHolder, gbc );
setUpLoginPanel();
setUpInteractionPanel();
setPanel( _loginPanel );
pack();
}
private void setUpLoginPanel() {
_password.setEchoChar( '*' );
_loginPanel.setLayout( new GridBagLayout() );
GridBagConstraints gbc;
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets( 4,4,4,4 );
_loginPanel.add( new Label( "Name: " ), gbc );
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets( 4,4,4,4 );
_loginPanel.add( _name, gbc );
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets( 4,4,4,4 );
_loginPanel.add( new Label( "Password: " ), gbc );
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 2;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets( 4,4,4,4 );
_loginPanel.add( _password, gbc );
Panel buttonHolder = new Panel();
buttonHolder.setLayout( new FlowLayout( FlowLayout.CENTER ) );
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 4;
gbc.gridwidth = 2;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets( 4,4,4,4 );
_loginPanel.add( buttonHolder, gbc );
Button a = new Button( "Cancel" );
buttonHolder.add( a );
a.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) {
setVisible( false );
}} );
Button b = new Button( "Ok" );
buttonHolder.add( b );
b.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) {
_bankAccount = _bankMachine.getBank().findAccountByNameAndPassword( _name.getText(), _password.getText() );
if( _bankAccount == null )
_prompt.setText( "Could not find a bank account with the supplied name and password." );
else
setPanel( _interactionPanel );
}} );
}
private void setPanel( Panel p ) {
_panelHolder.removeAll();
_panelHolder.add( p, "CENTER" );
_panelHolder.validate();
if( p == _interactionPanel ) {
setTitle( "Account: " + _bankAccount.getName() );
_balance.setText( "$" + _bankAccount.getBalance() );
_interestRate.setText( _bankAccount.getInterestRate() + "%" );
}
pack();
}
private void setUpInteractionPanel() {
_interactionPanel.setLayout( new GridBagLayout() );
GridBagConstraints gbc;
Button b;
int row = 0;
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 0;
gbc.insets = new Insets( 4,4,4,4 );
_interactionPanel.add( new Label( "Balance: " ), gbc );
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 1;
gbc.insets = new Insets( 4,4,4,4 );
_interactionPanel.add( new Label( "Interest Rate: " ), gbc );
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 0;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets( 4,4,4,4 );
_interactionPanel.add( _balance, gbc );
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 1;
gbc.fill = GridBagConstraints.HORIZONTAL;
gbc.insets = new Insets( 4,4,4,4 );
_interactionPanel.add( _interestRate, gbc );
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 2;
gbc.insets = new Insets( 4,4,4,4 );
_interactionPanel.add( _credit, gbc );
gbc = new GridBagConstraints();
gbc.gridx = 0;
gbc.gridy = 3;
gbc.insets = new Insets( 4,4,4,4 );
_interactionPanel.add( _debit, gbc );
b = new Button( "credit()" );
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 2;
gbc.insets = new Insets( 4,4,4,4 );
_interactionPanel.add( b, gbc );
b.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) {
try {
double creditAmount = new Double( _credit.getText() ).doubleValue();
_bankAccount.credit( creditAmount );
_balance.setText( "$" + _bankAccount.getBalance() );
}
catch ( NumberFormatException exception ) {
_prompt.setText( "Credit field was not in numerical form." );
}
_bankMachine.updateInfo();
validate();
}} );
b = new Button( "debit()" );
gbc = new GridBagConstraints();
gbc.gridx = 1;
gbc.gridy = 3;
gbc.insets = new Insets( 4,4,4,4 );
_interactionPanel.add( b, gbc );
b.addActionListener( new ActionListener() { public void actionPerformed( ActionEvent e ) {
try {
double debitAmount = new Double( _debit.getText() ).doubleValue();
if( debitAmount < _bankAccount.getBalance() )
_bankAccount.debit( debitAmount );
else
_prompt.setText( "You can't take out that much." );
_balance.setText( "$" + _bankAccount.getBalance() );
}
catch ( NumberFormatException exception ) {
_prompt.setText( "Debit field was not in numerical form." );
}
_bankMachine.updateInfo();
validate();
}} );
}
}