我有以下问题。我需要获得一个UI属性:
UIManager.getString("OptionPane.okButtonText")返回字符串"OK",它可以工作。但是,如果我迭代UIDefaults密钥集,就永远得不到密钥"OptionPane.okButtonText"。有人知道为什么会这样吗?我以三种不同的方式获得UIDefaults (UIManager.getDefaults()、UIManager.getLookAndFeel().getDefaults()和UIManager.getLookAndFeelDefaults()),但这些工作都没有。
编辑:我还找到了类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));
}此代码返回打印这些性质。键"OptionPane.okButtonText"不出现在输出中。
发布于 2011-04-20 14:49:20
这可能是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,我的默认地区
编辑:只是为了澄清-本地化的资源不一定是键()/entrySet()中的直接条目,这些是哈希表中的方法,它们在UIDefaults中不被覆盖。因此,虽然像在我的片段中一样,查找应该总是工作,查询枚举是错误的-条目不在那里,而是在一些由resourceBundles提供的缓存映射中。
Edit2:添加了ok的def (认为这将是.在谈了几个小时关于那把钥匙的事后,很明显:-)
Edit3:对于进一步的实验,我们可能应该在不同的地区查找一个与"OK“不同的值。cancelButtonText
编辑4(在重大中断之前的最后一次,承诺:-) --关于“如何-找到所有本地化的值”,如果不使用脏的方法(也就是:实现细节),就不可能找到所有的本地化值。我唯一能想到的方法就是查看resourceBundles,它加载得很好,比如
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));
}
}https://stackoverflow.com/questions/5729306
复制相似问题