установка локали компонентов не удалась - PullRequest
4 голосов
/ 04 августа 2011

Мне нужно, чтобы мое приложение установило программно локаль всех чувствительных компонентов, таких как JTextFields и JTextAreas.Также у меня есть информация о дате (месяц, записанный в виде слова), которая также зависит от локали.

Я написал следующий код, но, похоже, он не работает:

    public static void setLocale(java.awt.Container c /* main form */, Locale locale /* Locale.ENGLISH */) {

        Component[] components = c.getComponents();

        for (Component comp : components) {
            if (comp instanceof java.awt.Container)
                setLocale((java.awt.Container) comp, locale);
            comp.setLocale(locale);    
        }
    }

Что не так с кодом?

Ответы [ 2 ]

0 голосов
/ 16 мая 2015

В принципе, я не вижу причин для изменения локали все компоненты в дереве компонентов. С методом getLocale () автоматически ищет своих родителей.

/**
 * Gets the locale of this component.
 * @return this component's locale; if this component does not
 *          have a locale, the locale of its parent is returned
 */
public Locale getLocale();

Так что этого должно быть достаточно, чтобы установить язык корень дерева. Но уважается ли локаль где-то, я не могу сейчас сказать.

Bye

0 голосов
/ 04 августа 2011

Следующий код должен помочь:

public void switchDefaultLocale(Locale l) {
    if (! l.equals(Locale.getDefault())) {
        Locale.setDefault(l);
        JComponent.setDefaultLocale(l);
    }
}

Но это повлияет только на новый экземпляр JComponent. Если вы хотите обновить существующие экземпляры, не забудьте вызвать updateUI () для каждого.

...