如何动态更改Java LAF UIDefaults?

时间:2008-10-30 14:20:00

标签: java user-interface look-and-feel

我正在通过动态更改UIDefaults来定制Swing应用程序。最终目标是改变其中的许多(颜色,字体,大小,边框等)并根据每个用户保存结果。虽然它可能会给应用程序一些非标准外观,但客户端会问并且客户端应该收到。

我遇到的唯一问题是GUI只会更新ONCE。我第一次更改ui属性时,后续更改不会影响任何内容。

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

它有效,但永远不会再有效。想法?

1 个答案:

答案 0 :(得分:2)

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

此外,正如链接的doc页面所示,这可能只对字体和前景/背景颜色有帮助;当谈到改变边界和边距等事情时,你可能会失去运气。这不是Swing的Pluggable LookAndFeels的设计目标。也许你会对基于Synth的LAF的客户感兴趣吗?