Alb*_*rto 5 java swing properties look-and-feel uimanager
我有以下问题.我需要获取UI属性:
UIManager.getString("OptionPane.okButtonText")
Run Code Online (Sandbox Code Playgroud)
返回字符串"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));
}
Run Code Online (Sandbox Code Playgroud)
此代码返回打印这些属性.密钥"OptionPane.okButtonText"不会出现在输出中.
这可能是资源包的问题:optionPane(以及 fi 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
Run Code Online (Sandbox Code Playgroud)
与当前安装的 LAF 无关。我的系统是win/vista,我的默认语言环境
编辑:只是为了澄清 - 本地化资源不一定是 keys()/entrySet() 中的直接条目,这些是 Hashtable 中的方法,在 UIDefaults 中不会被覆盖。因此,虽然我的代码片段中的查找应该始终有效,但查询枚举是错误的 - 条目不在那里,而是在由 ResourceBundles 提供的一些缓存映射中。
Edit2:添加了 ok 的 def (认为在谈论该键几个小时后这将是显而易见的:-)
Edit3:为了进一步的实验,我们可能应该查找一个在区域设置中比“OK”不同的值,fi cancelButtonText
编辑4(重大突破前的最后一次,承诺:-) - 至于“如何找到所有本地化值”,如果不诉诸肮脏的手段(又名:实现细节)是不可能的。我能想到的唯一方法是查看已加载的资源包,例如
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));
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1063 次 |
| 最近记录: |