2011-08-04 11 views
4

JTextFieldsJTextAreasのような、すべての機密コンポーネントのロケールをプログラムで設定する必要があります。また、ロケールに敏感な日付情報(単語として書かれた月)もあります。コンポーネントのロケール設定に失敗しました

私は、次のコードを書きましたが、仕事をしていないようだ。

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

コードが悪いのか?

+0

表示されているエラーは何ですか?エラーが出ますか?それは他のコンポーネントではなく一部のコンポーネントで動作しますか?それは完全に失敗しますか?有効なロケールを渡していますか? – g051051

答えて

0

次のコードでは、トリックを行う必要があります。

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

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

+1

これは何らかの理由で動作しません...私はJComponent.setDefaultLocale(Locale.ENGLISH)を実行しました。私のテキストフィールドの4つと1つのテキストエリアでupdateUIを実行しました...効果はありません – ilja

0

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