2011-10-07 42 views
1

我想調試一個問題,我使用JColorChooser。我試圖設置本地,但它不斷恢復到系統的區域設置,儘管我設置了UIManager,Locale.setDefault或JColorChooser.setLocale。JColorChooser和本地化

我設置JColorChooser的區域設置與系統區域設置不同。我的小程序的其餘部分正在使用所需的用戶界面。

我已經試過如下:

JColorChooser colors = new JColorChooser(); 
colors.setLocale([spanish]); 
Locale.setLocale([spanish]); 
UIManager.getDefaults().setDefaultLocale([spanish]); 

然而,沒有這些選項更改組件。

+0

calized文本究竟你想:只有在不同的(不是系統)區域或所有用戶界面的顏色選擇? – kleopatra

+0

我所有的現有用戶界面都遵循設置的自定義用戶界面。顏色選擇器將UI保持到系統的語言環境。 [英語]。顏色選擇器上有些未翻譯的位。例如示例文本和選項卡。 – monksy

回答

1

EDIT

正如我前面提到(下面:-),JColorChooser的(以及大多數其他本地化預製組件)區域支持是次優的(又名:越野車)。直接設置其語言環境屬性不起作用。每個應用程序設置WORKSFORME(我的系統默認的是德國人),但:

Locale.setDefault(new Locale("es")); 

這樣做在應用程序代碼得很早,最好在創建任何組件之前,提供了最好的機會,以獲得預期的非系統本地化文本。

原來的答覆(已經咆哮位)在Swing

本地化支持是三心二意,說得客氣一點。

問題的一部分是AWT與Swing之間的語言環境解析機制之間的阻抗不匹配:前者解決了父鏈,期望大多數子類具有null語言環境屬性,後者顯式設置了默認返回值通過JComponent.getDefaultLocale()在其生命的早期(在JComponent構造函數中)。問題的另一部分是setLocale適當地觸發了一個更改事件..但沒人聽。這對於像f.i這樣的預製容器具有戲劇性的後果。 JColorChooser:ui委託人應該更新所有孩子的locale屬性,但什麼也不做。 (很容易忽略 - 像datePicker這樣的SwingX組件有同樣的問題,希望現在修復;-)

更糟糕的是:由於某種原因,ui甚至不尊重JComponent上設置的默認值...

因此,使其完全遵守任何語言環境的唯一方法似乎是在Locale上設置默認語言環境,然後將其恢復(如果您只想在該語言環境中使用顏色選擇器,認爲這是你想要什麼:-)

Locale old = Locale.getDefault(); 
    Locale.setDefault(new Locale("es")); 
    JColorChooser chooser = new JColorChooser(Color.RED); 
    Locale.setDefault(old); 

啊啊啊..由UI安裝的所有面板(DefaultXXChooserPanel)是越野車中,他們得到了LO通過

// wrong: 
    UIManager.getString(somekey) 

,而不是

// correct 
    UIManager.getString(somekey, appropriateLocale) 
+0

解決方法是基本上重置UIManager的外觀和感覺。你的回答讓我更接近了一點,所以我要給它信任。人們會認爲這將在1.6版本中得到修復。 實際上有幾個基於此的錯誤: http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4423439 http://bugs.sun.com/view_bug.do?bug_id= 4884480 – monksy