我正在通过动态更改UIDefaults来定制Swing应用程序。最终目标是更改其中的许多(颜色、字体、大小、边框等),并根据每个用户保存结果。虽然它可能会给应用程序带来一些不标准的外观,但客户会询问,客户会收到。
我遇到的唯一问题是GUI只会更新一次。我第一次更改ui属性的时候一切都很好,后续的更改不会影响任何东西。
// called from the EDT
// uiKeyName points to some ColorUIResource
UIManager.getDefaults().put(uiKeyName, <<color from color picker>>);
SwingUtilties.updateComponentTreeUI(rootWindow);
它只起过一次作用,但再也不会起作用了。想法?
当您将新颜色(例如)放入表中时,它是color对象还是ColorUIResource?据我所知,只有当前值为null
或UIResource的实例时,才会使用新值。因此,如果插入一个普通的旧"颜色"对象,则随后所做的任何更改都将被忽略。
此外,正如链接的文档页面所示,这可能只对字体和前景色/背景色有帮助;当涉及到边界和利润等变化时,你可能运气不佳。这不是Swing的Pluggable LookAndFeels的设计初衷。也许你可以让客户对基于Synth的LAF感兴趣?