首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JColorChooser和本地化

JColorChooser和本地化
EN

Stack Overflow用户
提问于 2011-10-08 05:45:47
回答 1查看 1.1K关注 0票数 2

我正在尝试调试使用JColorChooser的问题。我正在尝试设置本地,但不管我将其设置为UIManager、Locale.setDefault或JColorChooser.setLocale,它总是恢复到系统的区域设置。

我正在设置的JColorChooser区域设置与系统区域设置不同。我的applet的其余部分正在使用请求的UI。

我尝试过以下几种方法:

代码语言:javascript
复制
 JColorChooser colors = new JColorChooser();
 colors.setLocale([spanish]);
 Locale.setLocale([spanish]);
 UIManager.getDefaults().setDefaultLocale([spanish]); 

但是,这些选项都不会更改组件。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-08 18:55:15

编辑

正如我之前提到的(如下:-),JColorChooser (和其他大多数可本地化的预制组件)的语言环境支持是次优的(也就是: buggy)。直接设置它的locale属性是行不通的。不过,每个应用程序的设置是worksforme (我的系统默认值是德语):

代码语言:javascript
复制
Locale.setDefault(new Locale("es"));

在应用程序代码中非常早地这样做,最好是在创建任何组件之前,这将提供获得预期的非系统本地化文本的最佳机会。

原始答案(已经咆哮了一点)

说得客气些,Swing中的本地化支持是半心半意的。

问题的一部分是AWT和Swing之间的区域设置解析机制之间的阻抗不匹配:前者解析父链,期望大多数子级具有空的区域设置属性,后者显式设置JComponent.getDefaultLocale()在其生命周期的早期(在JComponent构造函数中)返回的默认值。问题的另一部分是setLocale会在适当的时候触发一个change事件。但没人听我说。这对像f.i.这样的预制容器产生了戏剧性的后果。JColorChooser: ui委托应该更新所有子对象的locale属性,但什么也不做。(很容易忽略-像datePicker这样的SwingX组件也有同样的问题,希望现在就能解决;-)

更糟糕的是:由于某些原因,ui甚至不尊重JComponent上设置的默认值……

因此,让它完全尊重任何语言环境的唯一方法似乎是在语言环境上设置默认语言环境,然后在之后恢复它(如果你只想在那个语言环境中有颜色选择器,我认为这不是你想要的:-)

代码语言:javascript
复制
    Locale old = Locale.getDefault();
    Locale.setDefault(new Locale("es"));
    JColorChooser chooser = new JColorChooser(Color.RED);
    Locale.setDefault(old);

啊..。由ui安装的所有面板(DefaultXXChooserPanel)都有错误,因为它们通过以下方式获取本地化文本

代码语言:javascript
复制
   // wrong:
   UIManager.getString(somekey)

而不是

代码语言:javascript
复制
   // correct
   UIManager.getString(somekey, appropriateLocale) 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7693158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档