home *** CD-ROM | disk | FTP | other *** search
/ BUG 15 / BUGCD1998_06.ISO / aplic / jbuilder / jsamples.z / InternationalClock.java < prev    next >
Text File  |  1997-07-30  |  4KB  |  163 lines

  1. package borland.samples.intl.beans;
  2.  
  3. import java.awt.*;
  4. import java.awt.event.*;
  5. import java.text.*;
  6. import java.util.*;
  7. import borland.jbcl.layout.*;
  8. import borland.jbcl.control.*;
  9.  
  10. import borland.samples.intl.beans.event.*;
  11.  
  12. /**
  13.  * A clock bean which displays time and date in locale-sensitive format.
  14.  */
  15. public class InternationalClock extends BevelPanel implements LocaleChangeListener, Runnable {
  16.   private BorderLayout borderLayout1 = new BorderLayout();
  17.   protected LabelControl labelControl1 = new LabelControl();
  18.   protected DateFormat clockFormat = DateFormat.getDateTimeInstance();
  19.   private int dateStyle = DateFormat.DEFAULT;
  20.   private int timeStyle = DateFormat.DEFAULT;
  21.   private boolean displayTime = true;
  22.   private boolean displayDate = true;
  23.   private Thread internalClock;
  24.   private boolean clockEnabled = false;
  25.   private int clockTickRate = 900;
  26.  
  27.   public InternationalClock() {
  28.     try {
  29.       jbInit();
  30.     }
  31.     catch (Exception e) {
  32.       e.printStackTrace();
  33.     }
  34.   }
  35.  
  36.   public void jbInit() throws Exception{
  37.     labelControl1.setText(clockFormat.format(new Date()));
  38.     this.setLayout(borderLayout1);
  39.     this.add(labelControl1, BorderLayout.CENTER);
  40.     setClockEnabled(true);
  41.   }
  42.  
  43.   public void updateTime() { 
  44.     if (clockFormat == null) {
  45.       labelControl1.setText("");
  46.     } else {
  47.       labelControl1.setText(clockFormat.format(new Date()));
  48.     }
  49.   }
  50.  
  51.   public void setDisplayDate(boolean displayDate) {
  52.     this.displayDate = displayDate;
  53.     updateDisplayFormat();
  54.   }
  55.  
  56.   public boolean isDisplayDate() {
  57.     return displayDate;
  58.   }
  59.  
  60.   public void setDateStyle(int dateStyle) {
  61.     this.dateStyle = dateStyle;
  62.     updateDisplayFormat();
  63.   }
  64.  
  65.   public int getDateStyle() {
  66.     return dateStyle;
  67.   }
  68.  
  69.   public void setDisplayTime(boolean displayTime) {
  70.     this.displayTime = displayTime;
  71.     updateDisplayFormat();
  72.   }
  73.  
  74.   public boolean isDisplayTime() {
  75.     return displayTime;
  76.   }
  77.  
  78.   public void setTimeStyle(int timeStyle) {
  79.     this.timeStyle = timeStyle;
  80.     updateDisplayFormat();
  81.   }
  82.  
  83.   public int getTimeStyle() {
  84.     return timeStyle;
  85.   }
  86.  
  87.   public void setLocale(Locale locale) {
  88.     super.setLocale(locale);
  89.     updateDisplayFormat();
  90.   }
  91.  
  92.   public Locale getLocale() {
  93.     try {
  94.       return super.getLocale();
  95.     } catch (IllegalComponentStateException e) {
  96.       return Locale.getDefault();
  97.     }
  98.   }
  99.  
  100.   public void setAlignment(int alignment) {
  101.     labelControl1.setAlignment(alignment);
  102.   }
  103.  
  104.   public int getAlignment() {
  105.     return labelControl1.getAlignment();
  106.   }
  107.  
  108.   public void localeChanged(LocaleChangeEvent e) {
  109.     updateDisplayFormat();
  110.   }
  111.  
  112.   private void updateDisplayFormat() {
  113.  
  114.     if (displayTime) {
  115.       if (displayDate) {
  116.     clockFormat = DateFormat.getDateTimeInstance(dateStyle, timeStyle, getLocale());
  117.       } else {
  118.     clockFormat = DateFormat.getTimeInstance(timeStyle, getLocale());
  119.       }
  120.     } else {
  121.       if (displayDate) {
  122.     clockFormat = DateFormat.getDateInstance(dateStyle, getLocale());
  123.       } else {
  124.     clockFormat = null;
  125.       }
  126.     }
  127.  
  128.     updateTime();
  129.   }
  130.  
  131.   public synchronized void setClockEnabled(boolean clockEnabled) {
  132.     this.clockEnabled = clockEnabled;
  133.     if (clockEnabled && internalClock == null) {
  134.       internalClock = new Thread(this);
  135.       internalClock.start();
  136.     }
  137.     if (clockEnabled) {
  138.       notify();
  139.     }
  140.   }
  141.  
  142.   public boolean getClockEnabled() {
  143.     return clockEnabled;
  144.   }
  145.  
  146.   // implementation of Runnable interface
  147.   public void run() {
  148.     try {
  149.       while (true) {
  150.     synchronized (this) {
  151.       while (!clockEnabled) {
  152.         wait();
  153.       }
  154.     }
  155.     updateTime();
  156.     Thread.sleep(clockTickRate);
  157.       }
  158.     } catch (InterruptedException e) {
  159.     }
  160.   }
  161.  
  162. }
  163.