Swing Components Java

/*
 *  JLocaleChooser.java  - A bean for choosing locales
 *  Copyright (C) 2004 Kai Toedter
 *  kai@toedter.com
 *  www.toedter.com
 *
 *  This program is free software; you can redistribute it and/or
 *  modify it under the terms of the GNU Lesser General Public License
 *  as published by the Free Software Foundation; either version 2
 *  of the License, or (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU Lesser General Public License for more details.
 *
 *  You should have received a copy of the GNU Lesser General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */
//package com.toedter.components;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Calendar;
import java.util.Locale;
import javax.swing.JComboBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
/**
 * JLocaleChooser is a bean for choosing locales.
 * 
 * @author Kai Toedter
 * @version $LastChangedRevision: 85 $
 * @version $LastChangedDate: 2006-04-28 13:50:52 +0200 (Fr, 28 Apr 2006) $
 */
public class JLocaleChooser extends JComboBox implements ItemListener {
  private static final long serialVersionUID = 8152430789764877431L;
  protected JComponent component;
  /**
   * Default JLocaleChooser constructor.
   */
  public JLocaleChooser() {
      this(null);
  }
    /**
     * Returns "JLocaleChoose".
     *
     * @return the name value
     */
    public String getName() {
        return "JLocaleChoose";
    }
  /**
   * Default JLocaleChooser constructor.
   */
  public JLocaleChooser(JComponent component) {
    super();
    this.component = component;
    addItemListener(this);
    locales = Calendar.getAvailableLocales();
    localeCount = locales.length;
    for (int i = 0; i < localeCount; i++) {
      if (locales[i].getCountry().length() > 0) {
        addItem(locales[i].getDisplayName());
      }
    }
    setLocale(Locale.getDefault());
  }
  /**
   * The ItemListener for the locales.
   */
  public void itemStateChanged(ItemEvent iEvt) {
    String item = (String) iEvt.getItem();
    int i;
    for (i = 0; i < localeCount; i++) {
      if (locales[i].getDisplayName().equals(item))
        break;
    }
    setLocale(locales[i], false);
  }
  /**
   * Sets the locale.
   * 
   * @see #getLocale
   */
  private void setLocale(Locale l, boolean select) {
    Locale oldLocale = locale;
    locale = l;
    int n = 0;
    if (select) {
      for (int i = 0; i < localeCount; i++) {
        if (locales[i].getCountry().length() > 0) {
          if (locales[i].equals(locale))
            setSelectedIndex(n);
          n += 1;
        }
      }
    }
    firePropertyChange("locale", oldLocale, locale);
    if(component != null) {
        component.setLocale(l);
    }
  }
  /**
   * Sets the locale. This is a bound property.
   * 
   * @see #getLocale
   */
  public void setLocale(Locale l) {
    setLocale(l, true);
  }
  /**
   * Returns the locale.
   */
  public Locale getLocale() {
    return locale;
  }
  /**
   * Creates a JFrame with a JLocaleChooser inside and can be used for
   * testing.
   */
  static public void main(String[] s) {
    JFrame frame = new JFrame("LocaleChooser");
    frame.getContentPane().add(new JLocaleChooser());
    frame.pack();
    frame.setVisible(true);
  }
  private Locale[] locales;
  private Locale locale;
  private int localeCount;
}