我正在尝试调试使用JColorChooser的问题。我正在尝试设置本地,但不管我将其设置为UIManager、Locale.setDefault或JColorChooser.setLocale,它总是恢复到系统的区域设置。
我正在设置的JColorChooser区域设置与系统区域设置不同。我的applet的其余部分正在使用请求的UI。
我尝试过以下几种方法:
JColorChooser colors = new JColorChooser();
colors.setLocale([spanish]);
Locale.setLocale([spanish]);
UIManager.getDefaults().setDefaultLocale([spanish]); 但是,这些选项都不会更改组件。
发布于 2011-10-08 18:55:15
编辑
正如我之前提到的(如下:-),JColorChooser (和其他大多数可本地化的预制组件)的语言环境支持是次优的(也就是: buggy)。直接设置它的locale属性是行不通的。不过,每个应用程序的设置是worksforme (我的系统默认值是德语):
Locale.setDefault(new Locale("es"));在应用程序代码中非常早地这样做,最好是在创建任何组件之前,这将提供获得预期的非系统本地化文本的最佳机会。
原始答案(已经咆哮了一点)
说得客气些,Swing中的本地化支持是半心半意的。
问题的一部分是AWT和Swing之间的区域设置解析机制之间的阻抗不匹配:前者解析父链,期望大多数子级具有空的区域设置属性,后者显式设置JComponent.getDefaultLocale()在其生命周期的早期(在JComponent构造函数中)返回的默认值。问题的另一部分是setLocale会在适当的时候触发一个change事件。但没人听我说。这对像f.i.这样的预制容器产生了戏剧性的后果。JColorChooser: ui委托应该更新所有子对象的locale属性,但什么也不做。(很容易忽略-像datePicker这样的SwingX组件也有同样的问题,希望现在就能解决;-)
更糟糕的是:由于某些原因,ui甚至不尊重JComponent上设置的默认值……
因此,让它完全尊重任何语言环境的唯一方法似乎是在语言环境上设置默认语言环境,然后在之后恢复它(如果你只想在那个语言环境中有颜色选择器,我认为这不是你想要的:-)
Locale old = Locale.getDefault();
Locale.setDefault(new Locale("es"));
JColorChooser chooser = new JColorChooser(Color.RED);
Locale.setDefault(old);啊..。由ui安装的所有面板(DefaultXXChooserPanel)都有错误,因为它们通过以下方式获取本地化文本
// wrong:
UIManager.getString(somekey)而不是
// correct
UIManager.getString(somekey, appropriateLocale) https://stackoverflow.com/questions/7693158
复制相似问题