2008-10-30 61 views
1

我正在通过动态更改UIDefaults来调整Swing应用程序。最终目标是改变它们中的许多(颜色,字体,大小,边界等)并将结果保存在每个用户的基础上。虽然它可能会给应用程序一些不规范的外观,但客户会询问并且客户端会收到。如何动态更改Java LAF UIDefaults?

我遇到的唯一问题是GUI将只更新一次。我第一次改变一个UI属性everthing是很好的,后续的改变不会影响任何东西。

// called from the EDT 
// uiKeyName points to some ColorUIResource 
UIManager.getDefaults().put(uiKeyName, <<color from color picker>>); 
SwingUtilties.updateComponentTreeUI(rootWindow); 

它工作一次,但从来没有再次。想法?

回答

2

当您将新颜色(例如)放入表格中时,是Color对象还是ColorUIResource?据我了解,只有当电流值值为nullUIResource的实例时才会采用新值。因此,如果插入一个普通的旧Color对象,则所做的任何后续更改都将被忽略。

此外,正如链接的文档页面所示,这可能只对字体和前景/背景颜色有所帮助;当谈到改变边界和利润率这样的事情时,你可能会倒霉。这不是Swing的Pluggable LookAndFeels设计的。也许你可能会对基于Synth的LAF感兴趣的客户端?

+0

我们不能使用Synth,因为我们正在定制的第三方LAF不是Synth,我们不能偏离...。下一个版本我会考虑基于Synth的LAF。 ColorUIResources完美运作。谢谢! – basszero 2008-10-31 14:12:48