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

金融证券系统

开发平台:

Java

  1. // <html><head><title>ATM Simulation Implementation - the Envelope Acceptor</title></head><body><h2>ATM Simulation Implementation - the Envelope Acceptor</h2><pre>
  2. /*
  3.  * Example ATM simulation - file EnvelopeAcceptor.java
  4.  *
  5.  * This file implements the class that manages the ATM's envelope acceptor
  6.  *
  7.  * Copyright (c) 1997 - Russell C. Bjork
  8.  *
  9.  */
  10. package atm.atmparts;
  11. import java.awt.*;
  12. //</pre><hr><h3>Class EnvelopeAcceptor</h3><pre>
  13. public class EnvelopeAcceptor extends Button
  14.   {     
  15.     //</pre><hr><pre>
  16.     public EnvelopeAcceptor()
  17.       { super("Click to insert Envelope");
  18.         _originalBounds = null;  // Must get this after GUI is all laid out
  19.       }
  20.     
  21.     //</pre><hr><pre>
  22.     public synchronized boolean acceptEnvelope()
  23.       { 
  24.         if (_originalBounds == null)
  25.             _originalBounds = bounds();
  26.         else
  27.             reshape(_originalBounds.x, _originalBounds.y,
  28.                     _originalBounds.width, _originalBounds.height);
  29.         show();
  30.         repaint();
  31.         requestFocus();
  32.                                 
  33.         // Wait for user to simulate inserting envelope by clicking button.
  34.         // If we wait 20 seconds and no envelope is entered, we time out
  35.         try
  36.           { wait(20 * 1000); }
  37.         catch(InterruptedException e)
  38.           { }
  39.         if (! _inserted)
  40.           { hide();
  41.             return _inserted;
  42.           }
  43.           
  44.         // Animate envelope going into the machine
  45.         
  46.         Rectangle currentBounds =
  47.            new Rectangle(_originalBounds.x, _originalBounds.y,
  48.                          _originalBounds.width, _originalBounds.height);
  49.                          
  50.         while (currentBounds.width > 0 && currentBounds.height > 0)
  51.           { reshape(currentBounds.x, currentBounds.y,
  52.                     currentBounds.width, currentBounds.height);
  53.             repaint();
  54.             try 
  55.               { Thread.sleep(100); } 
  56.             catch (InterruptedException e) 
  57.               { }
  58.             currentBounds.height -= 1;
  59.             currentBounds.width = 
  60.               (_originalBounds.width * currentBounds.height) / _originalBounds.height;
  61.             currentBounds.x =
  62.               _originalBounds.x + (_originalBounds.width - currentBounds.width) / 2;
  63.             currentBounds.y =
  64.               _originalBounds.y + (_originalBounds.height - currentBounds.height) / 2;
  65.           }
  66.           
  67.         hide();
  68.         
  69.         return _inserted;
  70.       }
  71.       
  72.     //</pre><hr><pre>
  73.     // Method and private data needed for GUI
  74.     public synchronized boolean action(Event e, Object arg)
  75.       { if (e.target == this)
  76.           { _inserted = true;
  77.             notify();
  78.             return true;
  79.           }
  80.         else
  81.             return false;
  82.       }    
  83.     private Rectangle _originalBounds;
  84.     private boolean _inserted;
  85.   }
  86.   
  87. //</pre></body></html>