Java UIManager.getDefauts()和UIManager.getLookAndFeelDefaults()之间的区别是什么?

Java UIManager.getDefauts()和UIManager.getLookAndFeelDefaults()之间的区别是什么?,java,swing,nimbus,uimanager,Java,Swing,Nimbus,Uimanager,我试图将Nimbus LookandFeel值覆盖到我的Java Swing应用程序中 当我尝试使用UIManager.getLookAndFeelDefaults()将“nimbusSelectionBackground”和“Table.background”值设置为更改时,如下所示 UIDefaults jDefaults = UIManager.getLookAndFeelDefaults(); //change nimbusL&F Selection Background co

我试图将Nimbus LookandFeel值覆盖到我的Java Swing应用程序中

当我尝试使用UIManager.getLookAndFeelDefaults()将“nimbusSelectionBackground”和“Table.background”值设置为更改时,如下所示

UIDefaults jDefaults = UIManager.getLookAndFeelDefaults();

//change nimbusL&F Selection Background color
jDefaults.put("nimbusSelectionBackground", mySelectionBackgroundColor); 

//change Table Background color
jDefaults.put("Table.background", myTableBackgroundColor); 

//update ui trees
for(Window window : Window.getWindows()){
    SwingUtilities.updateComponentTreeUI(window);
}
UIDefaults jDefaults = UIManager.getDefaults();

//change nimbusL&F Selection Background color
jDefaults.put("nimbusSelectionBackground", mySelectionBackgroundColor); 

//change Table Background color
jDefaults.put("Table.background", myTableBackgroundColor); 

//update ui trees
for(Window window : Window.getWindows()){
    SwingUtilities.updateComponentTreeUI(window);
}
这适用于“Table.background”,但不适用于“nimbusSelectionBackground”

但是当我使用UIManager.getDefauts()像这样更改defaultFont值时

UIDefaults jDefaults = UIManager.getLookAndFeelDefaults();

//change nimbusL&F Selection Background color
jDefaults.put("nimbusSelectionBackground", mySelectionBackgroundColor); 

//change Table Background color
jDefaults.put("Table.background", myTableBackgroundColor); 

//update ui trees
for(Window window : Window.getWindows()){
    SwingUtilities.updateComponentTreeUI(window);
}
UIDefaults jDefaults = UIManager.getDefaults();

//change nimbusL&F Selection Background color
jDefaults.put("nimbusSelectionBackground", mySelectionBackgroundColor); 

//change Table Background color
jDefaults.put("Table.background", myTableBackgroundColor); 

//update ui trees
for(Window window : Window.getWindows()){
    SwingUtilities.updateComponentTreeUI(window);
}
这对他们两个都非常有效


所以我的问题是为什么?UIManager.getDefauts()和UIManager.getLookAndFeelDefaults()之间有什么区别?

谢谢你的问题。看看代码,我的理解是:

  • getLookAndFeelDefaults
    返回初始化时由
    NimbusLookAndFeel
    创建的UIDefaults。Nimbus本身不监视此表的更改。但是,只要组件请求,UIManager就会从该表中给出一个值,然后再查看由其维护的值。因此,可以通过更改此表来修改所有标准组件UI默认值
  • getUIDefaults
    返回UIManager创建的UIDefaults。此表由Nimbus监控(使用PropertyChangeListener),Nimbus更新其内部默认值。Nimbus将这些内部值用于UI,而不会从UIManager中返回获取值

  • 也就是说,根据
    getLookAndFeelDefaults
    的java文档,我们应该只使用
    getUIDefaults
    ,这与您的经验是一致的。

    这是有道理的。非常感谢。