代码之家  ›  专栏  ›  技术社区  ›  basszero

如何动态更改Java LAF UIDIDER故障?

  •  1
  • basszero  · 技术社区  · 17 年前

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

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

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

    它只工作一次,但再也不会工作了。思想?

    1 回复  |  直到 16 年前
        1
  •  2
  •   Alan Moore Chris Ballance    17 年前

    当您将新颜色(例如)放入表中时,它是颜色对象还是颜色资源?据我所知,只有在 现在的 价值是 null UIResource . 因此,如果插入一个普通的旧颜色对象,您所做的任何后续更改都将被忽略。

    此外,正如链接文档页面所建议的,这可能只对字体和前景/背景色有帮助;当涉及到更改边框和页边距等内容时,您可能会走运。这不是Swing设计的可插拔外观。也许你能让客户对基于Synth的LAF感兴趣?