java - UI 属性不包含某些键

标签 java swing properties look-and-feel uimanager

我有以下问题。我需要获取 UI 属性:

UIManager.getString("OptionPane.okButtonText")

返回字符串 "OK",并且它有效。但是,如果我遍历 UIDefaults 键集,我永远不会得到键 "OptionPane.okButtonText"。有谁知道为什么会这样?我以三种不同的方式获取 UIDefaults(UIManager.getDefaults()UIManager.getLookAndFeel().getDefaults()UIManager .getLookAndFeelDefaults()),但这些都不起作用。

编辑:我也找到this list of properties类(class) JFileChooser ,其中包含一些未出现在 UIDefaults 键集中的属性。问题是:如何以编程方式获取所有这些属性?

编辑:代码示例:

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

此代码返回打印 these properties .键 "OptionPane.okButtonText" 没有出现在输出中。

最佳答案

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

这是对我有效的片段:

    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,我默认的locale de

编辑:只是为了澄清 - 本地化资源不一定是 keys()/entrySet() 中的直接条目,这些是 Hashtable 中的方法,它们不会在 UIDefaults 中被覆盖。因此,虽然我的代码片段中的查找应该始终有效,但查询枚举是错误的 - 条目不存在,但在一些由 resourceBundles 提供的缓存 map 中。

Edit2:添加了 ok 的 def(认为这将是……在讨论该键几个小时后显而易见的 :-)

Edit3:为了进一步的实验,我们可能应该查找一个在 Locales 中比“OK”不同的值,f.i.取消按钮文本

编辑 4(重大突破之前的最后一次, promise :-) - 关于“如何找到所有本地化值”,如果不诉诸肮脏的手段(又名:实现细节)是不可能的。我能想到的唯一方法是查看假定加载的资源包,例如

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

        }
    }

关于java - UI 属性不包含某些键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5729306/

相关文章:

java - 将星号转换为粗体或斜体标签

java - 在微调器外部单击时在 JSpinner 上失去焦点并提交编辑

java - JTree的动态显示?

c# - 访问 C# 属性名称或特性

c# - 是否有特定原因在类中不允许使用同名属性和方法,但允许将其作为扩展方法使用?

spring - 是否可以填充 spring util :list via properties file?

java - 为什么这个 SQL 语句会导致错误?

java - 获取Java类中文件的真实路径

Java 字段引用替换容易出错的字符串

java - 在 ScrollPane 中添加多个 jlabel