Keyboard.java
上传用户:ljt780218
上传日期:2022-07-30
资源大小:110k
文件大小:5k
源码类别:

金融证券系统

开发平台:

Java

  1. // <html><head><title>ATM Simulation Implementation - the Keyboard</title></head><body><h2>ATM Simulation Implementation - the Keyboard</h2><pre>
  2. /*
  3.  * Example ATM simulation - file Keyboard.java
  4.  *
  5.  * This file implements the class that manages the ATM's keyboard
  6.  *
  7.  * Copyright (c) 1997 - Russell C. Bjork
  8.  *
  9.  */
  10. package atm.atmparts;
  11. import java.awt.*;
  12. import atm.util.Money;
  13. //</pre><hr><h3>Class Keyboard</h3><pre>
  14. public class Keyboard extends Panel
  15.   {
  16.     //</pre><hr><pre>
  17.     public Keyboard()
  18.       { super();
  19.         setLayout(new GridLayout(4,3));
  20.         _numberKey = new Button[10];
  21.         for (int i = 1; i < 10; i ++)
  22.           { _numberKey[i] = new Button("" + i);
  23.             add(_numberKey[i]);
  24.           }
  25.         _enterKey = new Button("Enter");
  26.         _enterKey.setForeground(Color.black);
  27.         _enterKey.setBackground(new Color(128, 128, 255));
  28.         add(_enterKey);
  29.         _numberKey[0] = new Button("0");
  30.         add(_numberKey[0]);
  31.         _clearKey = new Button("Clear");
  32.         _clearKey.setForeground(Color.black);
  33.         _clearKey.setBackground(new Color(255, 128, 128));
  34.         add(_clearKey);
  35.       }
  36.                
  37.     //</pre><hr><pre>
  38.     public int readPIN(Display echoOn)
  39.       { StringBuffer result = new StringBuffer("");
  40.         StringBuffer echo = new StringBuffer("");
  41.         int keyClicked;
  42.         do
  43.           { keyClicked = inKey();
  44.             switch (keyClicked)
  45.               { case ENTER:
  46.                     // If a legitimate integer has been entered, return it;
  47.                     // otherwise fall through to clear case and make user
  48.                     // start over
  49.                     try
  50.                       { return Integer.parseInt(result.toString()); }
  51.                     catch (NumberFormatException e)
  52.                       { }
  53.                 case CLEAR:
  54.                     result.setLength(0);
  55.                     echo.setLength(0);
  56.                     break;
  57.                 default:
  58.                     result.append(keyClicked);
  59.                     echo.append('*');
  60.               }
  61.             echoOn.echoInput(echo.toString());
  62.           }
  63.         while (true);
  64.       }
  65.    
  66.     //</pre><hr><pre>
  67.     public int readMenuChoice(int numItems)
  68.       {
  69.         int key;
  70.         do
  71.           { key = inKey();
  72.           }
  73.         while (key < 1 || key > numItems);
  74.         return key;
  75.       }
  76.     
  77.     //</pre><hr><pre>
  78.     public Money readAmountEntry(Display echoOn)
  79.       { StringBuffer cents = new StringBuffer("  "),
  80.                      dollars = new StringBuffer("");
  81.         echoOn.echoInput(".  ");
  82.         int keyClicked;
  83.         do
  84.           { keyClicked = inKey();
  85.             switch (keyClicked)
  86.               { case ENTER:
  87.                     // If a legitimate amout has been entered, return it;
  88.                     // otherwise fall through to clear case and make user
  89.                     // start over
  90.                     try
  91.                       { if (dollars.length() == 0) dollars.append('0');
  92.                         if (cents.charAt(0) == ' ') cents.setCharAt(0, '0');
  93.                         return new Money(Integer.parseInt(dollars.toString()),
  94.                                          Integer.parseInt(cents.toString()));
  95.                       }
  96.                     catch (NumberFormatException e)
  97.                       { }
  98.                 case CLEAR:
  99.                     cents.setLength(0);
  100.                     cents.append("  ");
  101.                     dollars.setLength(0);
  102.                     break;
  103.                 default:
  104.                     if (cents.charAt(0) != ' ')
  105.                         dollars.append(cents.charAt(0));
  106.                     cents.setCharAt(0, cents.charAt(1));
  107.                     cents.setCharAt(1, Character.forDigit(keyClicked, 10));
  108.               }
  109.             echoOn.echoInput(dollars.toString() + "." + cents.toString());
  110.           }
  111.         while (true);
  112.       }
  113.     //</pre><hr><pre>
  114.     // Methods and private data needed for GUI
  115.     
  116.     private synchronized int inKey()
  117.       { _buttonClicked = NONE;
  118.         requestFocus();
  119.         do
  120.           { try
  121.               { wait(); }
  122.             catch (InterruptedException e)
  123.               { }
  124.           }
  125.         while (_buttonClicked == NONE);
  126.         return _buttonClicked;
  127.       }
  128.               
  129.     public synchronized boolean action(Event e, Object arg)
  130.       { for (int i = 0; i < 10; i ++)
  131.             if (e.target == _numberKey[i])
  132.                 _buttonClicked = i;
  133.         if (e.target == _enterKey)
  134.             _buttonClicked = ENTER;
  135.         if (e.target == _clearKey)
  136.             _buttonClicked = CLEAR;
  137.         if (_buttonClicked != NONE)
  138.           { notify();
  139.             return true;
  140.           }
  141.         else
  142.             return false;
  143.       }
  144.                   
  145.     // Each individual key is represented by a button
  146.     
  147.     private Button _numberKey[];  // _numberKey[i] represents digit i
  148.     private Button _enterKey;
  149.     private Button _clearKey;
  150.     
  151.     // Record the button clicked
  152.     
  153.     private int _buttonClicked;
  154.     private static final int NONE = -1;
  155.     private static final int ENTER = 10;
  156.     private static final int CLEAR = 11; 
  157.   }
  158.   
  159. //</pre></body></html>