home *** CD-ROM | disk | FTP | other *** search
/ BUG 15 / BUGCD1998_06.ISO / aplic / jbuilder / jsamples.z / LocaleChangeManager.java < prev    next >
Text File  |  1997-07-24  |  3KB  |  87 lines

  1. package borland.samples.intl.application;
  2.  
  3. import java.awt.*;
  4. import java.util.*;
  5.  
  6. import borland.samples.intl.beans.event.*;
  7.  
  8. /**
  9.  * Notifies registered observers when a locale change occurs.
  10.  * LocaleChangeManager itself must be registered with a
  11.  * LocaleChangeEvent source, in this case LocaleChooser.
  12.  * Using a LocaleChangeManager rather than having locale-aware components
  13.  * register themselves directly with the user-interface for selecting
  14.  * locales has two advantages:
  15.  *<ol>
  16.  *<li>Switching to a different locale chooser only requires changing
  17.  *    one hookup, the LocaleChangeManager to the locale chooser component.
  18.  *<li>Locale-aware components don't need to have (global) access to
  19.  *    the locale chooser component.
  20.  *</ol>
  21.  */
  22. public class LocaleChangeManager implements LocaleChangeListener {
  23.   // holds the single instance of the LocaleChangeManager
  24.   private static LocaleChangeManager localeChangeManager = null;
  25.   // holds registered event listeners
  26.   Vector localeChangeListeners = new Vector();
  27.   Locale locale = Locale.getDefault();
  28.  
  29.   protected LocaleChangeManager() {
  30.   }
  31.  
  32.   /**
  33.    * Returns the single instance of the locale change manager.
  34.    *
  35.    * @return instance of locale change manager
  36.    */
  37.   public static LocaleChangeManager getLocaleChangeManager() {
  38.     if (localeChangeManager == null) {
  39.       localeChangeManager = new LocaleChangeManager();
  40.     }
  41.     return localeChangeManager;
  42.   }
  43.  
  44.   /**
  45.    * Registers a LocaleChangeListener to be notified on a locale change event.
  46.    *
  47.    * @param listener LocaleChangeListener to be added to notification list
  48.    */
  49.   public synchronized void addLocaleChangeListener(LocaleChangeListener listener) {
  50.     localeChangeListeners.addElement(listener);
  51.   }
  52.  
  53.   /**
  54.    * Removes a LocaleChangeListener to be notified on a locale change event.
  55.    *
  56.    * @param listener LocaleChangeListener to be removed
  57.    */
  58.   public synchronized void removeLocaleChangeListener(LocaleChangeListener listener) {
  59.     localeChangeListeners.removeElement(listener);
  60.   }
  61.  
  62.   /**
  63.    * Required for implementation of the LocaleChangeListener interface.
  64.    * Notifies all registered listeners of a locale change
  65.    *
  66.    * @param e LocaleChangeEvent describing new locale
  67.    */
  68.   public void localeChanged(LocaleChangeEvent e) {
  69.     Vector listeners;
  70.  
  71.     locale = e.getLocale();
  72.     Locale.setDefault(locale);
  73.  
  74.     synchronized (this) {
  75.       listeners = (Vector) localeChangeListeners.clone();
  76.     }
  77.     for (int i = 0; i < listeners.size(); i++) {
  78.       ((LocaleChangeListener) listeners.elementAt(i)).localeChanged(e);
  79.     }
  80.   }
  81. }
  82.  
  83.  
  84.  
  85.  
  86.  
  87.