首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么UIManager.getDefaults().keySet()返回与UIManager.getDefaults().keys()不同的值?

为什么UIManager.getDefaults().keySet()返回与UIManager.getDefaults().keys()不同的值?
EN

Stack Overflow用户
提问于 2013-10-18 18:31:49
回答 1查看 481关注 0票数 5

我正在使用来自this stackOverflow post的代码,它可以实现我的预期:

代码语言:javascript
复制
    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和swing API,但我觉得我仍然缺少一些显而易见的东西。

代码语言:javascript
复制
    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));
        }
    }

您知道为什么第一个代码块循环并更改所有字体资源,而第二个代码块只循环几个项吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-19 12:27:20

这是一个很好的问题,答案是,您使用的方法返回完全不同的对象。

UIManager.getDefaults().keys();返回一个枚举。枚举并不担心要迭代集合中的已修复对象。

UIManager.getDefaults().keySet()返回一个集合,因此它不能包含重复对象。当要在set上插入元素时,使用对象的que方法检查对象是否已在集合上准备好。您正在寻找FontUIResource类型的对象,该对象具有以下实现os等于方法:

公共布尔值等于(对象obj)将此Font对象与指定的对象进行比较。重写:类对象参数中的等于: obj --用于比较返回的对象:如果对象是相同的,或者如果参数是一个字体对象,则为true;否则为false。

因此,在集合上,所有带有描述相同字体的参数的FontUIResource键都不会插入到集合上,其中一个键会被插入。同时,集合中只有映射中的一个键子集。

关于java的更多信息设置如下:

http://goo.gl/mfUPzp

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

https://stackoverflow.com/questions/19456693

复制
相关文章

相似问题

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