/* * 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; }