我正在使用这个 stackOverflow 帖子中的代码,它符合我的期望:
Enumeration<Object> keys = UIManager.getDefaults().keys();
while (keys.hasMoreElements()) {
Object key = keys.nextElement();
Object value = UIManager.get(key);
if (value instanceof FontUIResource) {
FontUIResource orig = (FontUIResource) value;
Font font = new Font(orig.getFontName(), orig.getStyle(), orig.getSize());
UIManager.put(key, new FontUIResource(font));
}
}
我尝试将其重构为以下代码,该代码仅循环通过 javax.swing.plaf 中的几个类,而不是完整的组件集。我已经尝试过挖掘 swing API 和 HashTable API,但我觉得我仍然缺少一些明显的东西。
for(Object key : UIManager.getDefaults().keySet()){
Object value = UIManager.get(key);
if(value instanceof FontUIResource){
FontUIResource orig = (FontUIResource) value;
Font font = new Font(orig.getFontName(), orig.getStyle(), orig.getSize());
UIManager.put(key, new FontUIResource(font));
}
}
任何想法为什么第一个代码块循环并更改所有字体资源,而第二个代码块只循环少数项目?