home *** CD-ROM | disk | FTP | other *** search
/ Web Programming with Visual J++ / Web_Programming_with_Visual_J_SAMS.NET_Version_1.0_1997.iso / source / chap12 / ex12c.java < prev    next >
Text File  |  1996-09-22  |  3KB  |  122 lines

  1. import java.applet.*;
  2. import java.awt.*;
  3.  
  4. public class EX12C extends Applet implements Runnable
  5. {
  6.     protected Thread CounterThread;
  7.     protected Button SuspendButton = new Button("Suspend");
  8.     protected Button ResumeButton = new Button("Resume");
  9.     protected Label CountLabel;
  10.     protected TextField MaxCountTextField;
  11.     protected int maxCount = 10;
  12.     protected int count = maxCount;
  13.  
  14.     public void init()
  15.     {
  16.         // gives us some control over where the controls are
  17.         //   to be placed
  18.         setLayout(new BorderLayout());
  19.  
  20.         // provide some control over the count
  21.         Panel p = new Panel();
  22.         p.add(SuspendButton);
  23.         p.add(ResumeButton);
  24.         add("North", p);
  25.  
  26.         // provide a visual of the count
  27.         p = new Panel();
  28.         p.add(new Label("Count:"));
  29.         CountLabel = new Label(Integer.toString(count));
  30.         p.add(CountLabel);
  31.         add("Center", p);
  32.  
  33.         // let the user set the max count
  34.         p = new Panel();
  35.         p.add(new Label("Enter the starting point:"));
  36.         MaxCountTextField = new TextField(Integer.toString(maxCount), 3);
  37.         p.add(MaxCountTextField);
  38.         add("South", p);
  39.     }
  40.  
  41.     public void start()
  42.     {
  43.         if (CounterThread == null) {
  44.             // allocate the thread, using the local run method
  45.             CounterThread = new Thread(this);
  46.             CounterThread.start();
  47.         }
  48.     }
  49.     
  50.     public void stop()
  51.     {
  52.         if (CounterThread != null) {
  53.             // stop the thread
  54.             CounterThread.stop();
  55.             CounterThread = null;
  56.         }
  57.     }
  58.  
  59.     public boolean action(Event evt, Object arg)
  60.     {
  61.         boolean retval = false;            // assume event not processed
  62.  
  63.         if (evt.target == SuspendButton) {
  64.             if (CounterThread != null)
  65.                 CounterThread.suspend();
  66.  
  67.             retval = true;
  68.         }
  69.         else if (evt.target == ResumeButton) {
  70.             if (CounterThread != null)
  71.                 CounterThread.resume();
  72.  
  73.             retval = true;
  74.         }
  75.         else if (evt.target == MaxCountTextField) {
  76.             SetMaxCount();
  77.  
  78.             retval = true;
  79.         }
  80.  
  81.         return retval;
  82.     }
  83.  
  84.     public void run()
  85.     {
  86.         while (true) {
  87.             try {
  88.                 Thread.sleep(1000);
  89.             }
  90.             catch (InterruptedException e) {}
  91.  
  92.             CountDown();
  93.         }
  94.     }
  95.  
  96.     protected synchronized void CountDown()
  97.     {
  98.         count--;
  99.  
  100.         CountLabel.setText(Integer.toString(count));
  101.  
  102.         if (count == 0)
  103.             // reset to maxCount + 1 since the first call will 
  104.             //   move it back down to maxCount and then display
  105.             count = maxCount + 1;
  106.     }
  107.  
  108.     protected synchronized void SetMaxCount()
  109.     {
  110.         try {
  111.             maxCount = Integer.parseInt(MaxCountTextField.getText());
  112.  
  113.             count = maxCount + 1;
  114.         }
  115.         catch (NumberFormatException e)
  116.         {
  117.             // reset the contents back to the current max
  118.             MaxCountTextField.setText(Integer.toString(maxCount));
  119.         }
  120.     }
  121. }
  122.