首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UI属性不包含某些键。

UI属性不包含某些键。
EN

Stack Overflow用户
提问于 2011-04-20 11:09:55
回答 1查看 1.2K关注 0票数 5

我有以下问题。我需要获得一个UI属性:

代码语言:javascript
复制
UIManager.getString("OptionPane.okButtonText")

返回字符串"OK",它可以工作。但是,如果我迭代UIDefaults密钥集,就永远得不到密钥"OptionPane.okButtonText"。有人知道为什么会这样吗?我以三种不同的方式获得UIDefaults (UIManager.getDefaults()UIManager.getLookAndFeel().getDefaults()UIManager.getLookAndFeelDefaults()),但这些工作都没有。

编辑:我还找到了类JFileChooser这个属性列表,它包含一些在UIDefaults密钥集中没有出现的属性。问题是:如何以编程方式获得所有这些属性?

编辑:代码示例:

代码语言:javascript
复制
UIDefaults defaults = UIManager.getDefaults();
String thekey = "OptionPane.okButtonText";
System.out.println(thekey + ": " + UIManager.getString(thekey));
for (Enumeration e = defaults.keys(); e.hasMoreElements();) {
    Object key = e.nextElement();
    System.out.println(key + ": " + defaults.get(key));
}

此代码返回打印这些性质。键"OptionPane.okButtonText"不出现在输出中。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-04-20 14:49:20

这可能是resourceBundles的一个问题: optionPane (以及f.i )。fileChooser和其他)文本属性是从本地化包加载的。它们以前是com.sun.swing.internal.plaf下的内部类(不完全确定是否仍然如此)。也许那里出了什么问题..。

下面是为我工作的片段:

代码语言:javascript
复制
    String ok = "OptionPane.okButtonText";
    String text = ""; 
    text += " LAF: " + UIManager.getLookAndFeelDefaults().get(ok);
    text += " lookup: " + UIManager.get(ok);
    text += " default: " + UIManager.getDefaults().get(ok);
    System.out.println(text);

    // output, whereever I add that:
     LAF: OK lookup: OK default: OK

目前独立安装LAF。我的系统是win/vista,我的默认地区

编辑:只是为了澄清-本地化的资源不一定是键()/entrySet()中的直接条目,这些是哈希表中的方法,它们在UIDefaults中不被覆盖。因此,虽然像在我的片段中一样,查找应该总是工作,查询枚举是错误的-条目不在那里,而是在一些由resourceBundles提供的缓存映射中。

Edit2:添加了ok的def (认为这将是.在谈了几个小时关于那把钥匙的事后,很明显:-)

Edit3:对于进一步的实验,我们可能应该在不同的地区查找一个与"OK“不同的值。cancelButtonText

编辑4(在重大中断之前的最后一次,承诺:-) --关于“如何-找到所有本地化的值”,如果不使用脏的方法(也就是:实现细节),就不可能找到所有的本地化值。我唯一能想到的方法就是查看resourceBundles,它加载得很好,比如

代码语言:javascript
复制
    import com.sun.swing.internal.plaf.basic.resources.basic;

    String cancel = "OptionPane.cancelButtonText";
    ListResourceBundle bundle = new basic();
    for (String key : bundle.keySet()) {
        if(cancel.equals(key)) {
            System.out.println(key
                    + ": " + bundle.getString(key));

        }
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5729306

复制
相关文章

相似问题

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