1

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

我遇到的唯一问题是 GUI 只会更新一次。我第一次更改 ui 属性时一切都很好,随后的更改不会影响任何事情。

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

它工作一次,但再也不会。想法?

4

1 回答 1

2

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

此外,正如链接的文档页面所暗示的那样,这可能仅有助于字体和前景色/背景色;当涉及到更改边框和边距等内容时,您可能会不走运。这不是 Swing 的 Pluggable LookAndFeels 的设计目的。也许您可以让客户对基于 Synth 的 LAF 感兴趣?

于 2008-10-30T17:06:11.360 回答