EDIT
, как я упоминал ранее (ниже :-), поддержка локали JColorChooser (и большинства других локализуемых готовых компонентов) неоптимальна (иначе: глючит). Установка его свойства locale напрямую просто не работает. Рабочая форма настройки для каждого приложения (по умолчанию у меня немецкий язык):
Locale.setDefault(new Locale("es"));
Делайте это очень рано в коде приложения, лучше всего перед созданием любого компонента, дающего наилучшие шансы получить ожидаемые несистемные локализованные тексты.
Оригинальный ответ (немного побежав)
Поддержка локализации в Swing, мягко говоря, нерешительная.
Отчасти проблема заключается в несоответствии импеданса между механизмом разрешения локали между AWT и Swing: первый разрешает родительскую цепочку, ожидая, что большинство дочерних элементов будет иметь нулевое свойство локали, а второй явно устанавливает значение по умолчанию, возвращаемое JComponent.getDefaultLocale () очень рано в своей жизни (в конструкторе JComponent). Другая часть проблемы заключается в том, что setLocale запускает событие изменения соответствующим образом ... но никто не слушает. Это имеет драматические последствия для сборных контейнеров, таких как f.i. JColorChooser: делегат пользовательского интерфейса должен обновить свойство locale всех дочерних элементов, но просто ничего не делает. (Это легко пропустить - компоненты SwingX, такие как datePicker, имели ту же проблему, которая, мы надеемся, теперь исправлена; -)
Что еще хуже: по какой-то причине пользовательский интерфейс даже не соблюдает значение по умолчанию, установленное в JComponent ...
Таким образом, единственный способ заставить его полностью уважать любую локаль, кажется, установить локаль по умолчанию на локаль, а затем восстановить ее (если вы хотите, чтобы в этой локали был только средство выбора цвета, что я не думаю, это то, что вы хотите: -)
Locale old = Locale.getDefault();
Locale.setDefault(new Locale("es"));
JColorChooser chooser = new JColorChooser(Color.RED);
Locale.setDefault(old);
аааа .. все панели (DefaultXXChooserPanel), установленные пользовательским интерфейсом, глючат из-за того, что они получают локализованный текст на
// wrong:
UIManager.getString(somekey)
вместо
// correct
UIManager.getString(somekey, appropriateLocale)