3

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);    
        }
    }

コードの何が問題になっていますか?

4

2 に答える 2

0

次のコードでうまくいくはずです。

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

ただし、これはJComponentの新しいインスタンスにのみ影響します。既存のインスタンスを更新する場合は、それぞれでupdateUI()を呼び出すことを忘れないでください。

于 2011-08-04T14:16:45.843 に答える
0

基本的に、コンポーネント ツリー内のすべてのコンポーネントのロケールを変更する理由がわかりません。メソッド 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();

したがって、ツリーのルートのロケールを設定するだけで十分です。しかし、ロケールがどこかで尊重されているかどうかは、今のところわかりません。

さよなら

于 2015-05-16T13:24:05.113 に答える