背景:
从文档中可以看出,该方法SwingUtilities.updateComponentTreeUI()要求树(什么树?)中的每个组件调用该方法来更新自己的UI 属性updateUI()。
SwingUtilities.updateComponentTreeUI()强烈建议在我们设置LAF之后调用,调用方法:UIManager.setLookAndFeel(LAFClassName),否则LAF主题无法应用于某些组件,最糟糕的是,某些组件无法重新设计(并且可能会抛出一些异常?)。
我对这类事情很陌生,在发现更具启发性的方法SwingUtilities.updateComponentTreeUI() 后UIManager.setLookAndFeel(LAFClassName)我发现了该方法。
在发现之前SwingUtilities.updateComponentTreeUI()我一直遇到一些问题/Exceptions/NullPointerExceptions,事实是我真的不明白它们的原因,直到我没有发现该SwingUtilities.updateComponentTreeUI()方法,这让我明白树中的某些组件不能被更新为新的 LAF。
具体/实际问题:
例如,如果我有一个
子框架
(动态实例化或由 ActionEvent(单击)触发)
主框架
),我在其中设置外观属性,然后调用SwingUtilitiesupdateComponentTreeUI()传递给它的引用mainJFrame:
SwingUtilities.updateComponentTreeUI(mainJFrame),
最后一个是否会更新其所有子组件/subJFrames(从而更新subJFrame我设置 LAF 的位置)?
这不是一个微不足道的问题(还要记住文档所说的内容),因为我调用UIManager.setLookAndFeel(LAFClassName)中的方法subJFrame(这个调用实际上做了什么?),然后我调用SwingUtilities.updateComponentTreeUI()方法传递给它一个对 的引用mainJFrame,那么什么是LAF 主题将应用于mainJFrame?的所有子组件 如果某些子组件/subJFrame尚未初始化?
文档没有指定这种情况.似乎没有任何反应,但我不确定.这个方法最终会抛出异常吗?