UIManager.getDefauts()和UIManager.getLookAndFeelDefaults()有什么区别?

时间:2015-08-14 12:37:24

标签: java swing nimbus uimanager

我试图将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);
}

这适用于“Table.background”,但它不适用于“nimbusSelectionBackground”;

但是当我使用UIManager.getDefauts()来更改defaultFont值时。

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()有什么区别?

1 个答案:

答案 0 :(得分:1)

感谢您的提问。看看代码,这是我的理解:

  1. getLookAndFeelDefaults返回由NimbusLookAndFeel在初始化时创建的UIDefaults。 Nimbus本身不监控此表的更改。但是,只要组件请求,UIManager就会从该表中给出一个值,然后再查看由它维护的组件。因此,可以通过更改此表来修改所有标准组件UI默认值。
  2. getUIDefaults返回由UIManager创建的UIDefaults。该表由Nimbus监控(使用PropertyChangeListener),Nimbus更新其内部默认值。 Nimbus将这些内部值用于UI,并且不会返回从UIManager获取值。
  3. 也就是说,根据getLookAndFeelDefaults的java文档,我们应该只使用getUIDefaults,这与您的体验一致。