import java.awt.FlowLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextArea; /** A frame displaying the components of an ATM. */ public class ATMFrame extends JFrame { private static final int FRAME_WIDTH = 300; private static final int FRAME_HEIGHT = 300; private JButton aButton; private JButton bButton; private JButton cButton; private KeyPad pad; private JTextArea display; private ATM theATM; /** Constructs the user interface of the ATM frame. */ public ATMFrame(ATM anATM) { theATM = anATM; // Construct components pad = new KeyPad(); display = new JTextArea(4, 20); aButton = new JButton(" A "); aButton.addActionListener(new AButtonListener()); bButton = new JButton(" B "); bButton.addActionListener(new BButtonListener()); cButton = new JButton(" C "); cButton.addActionListener(new CButtonListener()); // Add components JPanel buttonPanel = new JPanel(); buttonPanel.add(aButton); buttonPanel.add(bButton); buttonPanel.add(cButton); setLayout(new FlowLayout()); add(pad); add(display); add(buttonPanel); showState(); setSize(FRAME_WIDTH, FRAME_HEIGHT); } /** Updates display message. */ public void showState() { int state = theATM.getState(); pad.clear(); if (state == ATM.START) { display.setText("Enter customer number\nA = OK"); } else if (state == ATM.PIN) { display.setText("Enter PIN\nA = OK"); } else if (state == ATM.ACCOUNT) { display.setText("Select Account\n" + "A = Checking\nB = Savings\nC = Exit"); } else if (state == ATM.TRANSACT) { display.setText("Balance = " + theATM.getBalance() + "\nEnter amount and select transaction\n" + "A = Withdraw\nB = Deposit\nC = Cancel"); } } class AButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { int state = theATM.getState(); if (state == ATM.START) { theATM.setCustomerNumber((int) pad.getValue()); } else if (state == ATM.PIN) { theATM.selectCustomer((int) pad.getValue()); } else if (state == ATM.ACCOUNT) { theATM.selectAccount(ATM.CHECKING); } else if (state == ATM.TRANSACT) { theATM.withdraw(pad.getValue()); theATM.back(); } showState(); } } class BButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { int state = theATM.getState(); if (state == ATM.ACCOUNT) { theATM.selectAccount(ATM.SAVINGS); } else if (state == ATM.TRANSACT) { theATM.deposit(pad.getValue()); theATM.back(); } showState(); } } class CButtonListener implements ActionListener { public void actionPerformed(ActionEvent event) { int state = theATM.getState(); if (state == ATM.ACCOUNT) { theATM.reset(); } else if (state == ATM.TRANSACT) { theATM.back(); } showState(); } } }