我试图将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()有什么区别?
答案 0 :(得分:1)
感谢您的提问。看看代码,这是我的理解:
getLookAndFeelDefaults
返回由NimbusLookAndFeel
在初始化时创建的UIDefaults。 Nimbus本身不监控此表的更改。但是,只要组件请求,UIManager就会从该表中给出一个值,然后再查看由它维护的组件。因此,可以通过更改此表来修改所有标准组件UI默认值。getUIDefaults
返回由UIManager创建的UIDefaults。该表由Nimbus监控(使用PropertyChangeListener),Nimbus更新其内部默认值。 Nimbus将这些内部值用于UI,并且不会返回从UIManager获取值。也就是说,根据getLookAndFeelDefaults
的java文档,我们应该只使用getUIDefaults
,这与您的体验一致。