首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么javax.swing.UIManager.getDefaults()报告keySet.size为零?

为什么javax.swing.UIManager.getDefaults()报告keySet.size为零?
EN

Stack Overflow用户
提问于 2020-06-08 20:26:50
回答 1查看 60关注 0票数 0

我正在尝试根据用户的配置文件在运行时更改一些UI属性、字体、颜色等。

javax.swing.UIManager.getDefaults().keySet()返回的Set对象报告的size()为零,即使UIDefaults对象报告的大小不为零,其entrySet()也是如此。

正如预期的那样,使用javax.swing.UIManager.getLookAndFeelDefaults()为所有三个对象报告相同的非零大小。

代码语言:javascript
复制
package test;

import java.util.Map;
import java.util.Set;
import javax.swing.UIDefaults;
import javax.swing.UIManager;

public class TestUIManager {

    public static void main(String[] args) {
        UIDefaults uidef = UIManager.getDefaults();
        System.out.println("UIManager.getDefaults()");
        testUIDefaults(uidef);

        uidef = UIManager.getLookAndFeelDefaults();
        System.out.println("UIManager.getLookAndFeelDefaults()");
        testUIDefaults(uidef);
    }

    private static void testUIDefaults(UIDefaults uidef) {
        Set<Object> keySet = uidef.keySet();
        Set<Map.Entry<Object, Object>> entrySet = uidef.entrySet();
        System.out.println("    uidef.size = " + uidef.size() +
                " : keySet.size = " + keySet.size() +
                " : entrySet.size = " + entrySet.size());
    }
}

在我的Ubuntu系统上,这段代码的输出是:

代码语言:javascript
复制
UIManager.getDefaults()
    uidef.size = 641 : keySet.size = 0 : entrySet.size = 641
UIManager.getLookAndFeelDefaults()
    uidef.size = 641 : keySet.size = 641 : entrySet.size = 641

非空的哈希表(UIDefaults)怎么会有一个空的keySet呢?

注意:我问这个主要是为了满足我自己的好奇心。使用getLookAndFeelDefaults()似乎可以得到我想要的结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-08 21:20:41

将此代码插入到函数中:

代码语言:javascript
复制
System.out.println("uidef.getClass()="+uidef.getClass());

这表明UIManager.getDefaults()返回一个javax.swing.MultiUIDefaults

代码语言:javascript
复制
class MultiUIDefaults extends UIDefaults

MultiUIDefaults覆盖entrySet / get和其他调用,这会影响entrySet与keySet调用的值,后者不会被覆盖(从我在JDK14源代码中看到的)

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

https://stackoverflow.com/questions/62262064

复制
相关文章

相似问题

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