Java UIManager.getDefauts()和UIManager.getLookAndFeelDefaults()之间的区别是什么?
我试图将Nimbus LookandFeel值覆盖到我的Java Swing应用程序中 当我尝试使用UIManager.getLookAndFeelDefaults()将“nimbusSelectionBackground”和“Table.background”值设置为更改时,如下所示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
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
,这与您的经验是一致的。这是有道理的。非常感谢。