1  import java.awt.FlowLayout;
  2  import java.awt.GridLayout;
  3  import java.awt.event.ActionEvent;
  4  import java.awt.event.ActionListener;
  5  import javax.swing.JButton;
  6  import javax.swing.JFrame;
  7  import javax.swing.JPanel;
  8  import javax.swing.JTextArea;
  9  
 10  /**
 11     A frame displaying the components of an ATM.
 12  */
 13  public class ATMFrame extends JFrame
 14  {  
 15     private static final int FRAME_WIDTH = 300;
 16     private static final int FRAME_HEIGHT = 300;
 17  
 18     private JButton aButton;
 19     private JButton bButton;
 20     private JButton cButton;
 21     
 22     private KeyPad pad;
 23     private JTextArea display;
 24  
 25     private ATM theATM;
 26  
 27     /**
 28        Constructs the user interface of the ATM frame.
 29     */
 30     public ATMFrame(ATM anATM)
 31     {  
 32        theATM = anATM;
 33        
 34        // Construct components
 35        pad = new KeyPad();
 36  
 37        display = new JTextArea(4, 20);
 38        
 39        aButton = new JButton("  A  ");
 40        aButton.addActionListener(new AButtonListener());
 41  
 42        bButton = new JButton("  B  ");
 43        bButton.addActionListener(new BButtonListener());
 44  
 45        cButton = new JButton("  C  ");
 46        cButton.addActionListener(new CButtonListener());
 47        
 48        // Add components
 49  
 50        JPanel buttonPanel = new JPanel();
 51        buttonPanel.add(aButton);
 52        buttonPanel.add(bButton);
 53        buttonPanel.add(cButton);
 54        
 55        setLayout(new FlowLayout());
 56        add(pad);
 57        add(display);
 58        add(buttonPanel);
 59        showState();
 60  
 61        setSize(FRAME_WIDTH, FRAME_HEIGHT);
 62     }
 63     
 64     /** 
 65        Updates display message.
 66     */
 67     public void showState()
 68     {  
 69        int state = theATM.getState();
 70        pad.clear();
 71        if (state == ATM.START)
 72        {
 73           display.setText("Enter customer number\nA = OK");
 74        }
 75        else if (state == ATM.PIN)
 76        {
 77           display.setText("Enter PIN\nA = OK");
 78        }
 79        else if (state == ATM.ACCOUNT)
 80        {
 81           display.setText("Select Account\n" 
 82                 + "A = Checking\nB = Savings\nC = Exit");
 83        }
 84        else if (state == ATM.TRANSACT)
 85        {
 86           display.setText("Balance = " 
 87                 + theATM.getBalance() 
 88                 + "\nEnter amount and select transaction\n"
 89                 + "A = Withdraw\nB = Deposit\nC = Cancel");
 90        }
 91     }
 92     
 93     class AButtonListener implements ActionListener
 94     {  
 95        public void actionPerformed(ActionEvent event)
 96        {  
 97           int state = theATM.getState();
 98           if (state == ATM.START)
 99           {
100              theATM.setCustomerNumber((int) pad.getValue());
101           }
102           else if (state == ATM.PIN)
103           {
104              theATM.selectCustomer((int) pad.getValue());
105           }
106           else if (state == ATM.ACCOUNT)
107           {
108              theATM.selectAccount(ATM.CHECKING);
109           }
110           else if (state == ATM.TRANSACT)
111           {
112              theATM.withdraw(pad.getValue());
113              theATM.back();
114           }
115           showState();
116        }
117     }
118     
119     class BButtonListener implements ActionListener
120     {  
121        public void actionPerformed(ActionEvent event)
122        {  
123           int state = theATM.getState();
124           if (state == ATM.ACCOUNT)
125           {
126              theATM.selectAccount(ATM.SAVINGS);
127           }
128           else if (state == ATM.TRANSACT)
129           {
130              theATM.deposit(pad.getValue());
131              theATM.back();
132           }
133           showState();
134        }
135     }
136  
137     class CButtonListener implements ActionListener
138     {  
139        public void actionPerformed(ActionEvent event)
140        {  
141           int state = theATM.getState();
142           if (state == ATM.ACCOUNT)
143           {
144              theATM.reset();
145           }
146           else if (state == ATM.TRANSACT)
147           {
148              theATM.back();
149           }
150           showState();
151        }
152     }
153  }