Java 覆盖Swing外观中的单个UI

Java 覆盖Swing外观中的单个UI,java,swing,look-and-feel,Java,Swing,Look And Feel,有没有一种方法可以只覆盖单个UI组件的L&F(不是它的单个实例,而是所有实例)和自定义的L&F?基本上我想覆盖它的L&F默认值 看起来所有这些都是在BasicLookAndFeel\getDefaults 我想如果我真的需要,我可以创建一个自定义的外观,扩展我想要使用的外观,并在initClassDefaults方法中覆盖它,但我更希望能够覆盖当前正在使用的任何UI 我在想我可以只做UIManager.put(,) 对于我正在处理的示例,这似乎不起作用,但这可能是因为我正在尝试设置一个不属于标准

有没有一种方法可以只覆盖单个UI组件的L&F(不是它的单个实例,而是所有实例)和自定义的L&F?基本上我想覆盖它的L&F默认值

看起来所有这些都是在
BasicLookAndFeel\getDefaults

我想如果我真的需要,我可以创建一个自定义的外观,扩展我想要使用的外观,并在
initClassDefaults
方法中覆盖它,但我更希望能够覆盖当前正在使用的任何UI

我在想我可以只做
UIManager.put(,)

对于我正在处理的示例,这似乎不起作用,但这可能是因为我正在尝试设置一个不属于标准外观的组件(该组件添加了自身)。我想知道这是否是正确的方法。

启动后更改外观

即使在程序运行后,也可以使用setLookAndFeel更改L&F GUI是可见的。为了使现有组件反映新的L&F, 每次调用一次SwingUtilities updateComponentTreeUI方法 顶级容器。然后,您可能希望调整每个顶层的大小 容器以反映其所包含组件的新尺寸。对于 例如:


换句话说:您可以更改顶级容器的外观(我没有测试它是否仅限于顶级容器,或者此方法是否可以应用于任何容器)。或者,更准确地回答您的问题:我看不出有设计单个组件样式的方法,但是有一种方法可以用于(顶级)容器中的单个组件

啊,问题是我忘了在UI中实现
createUI
。一旦我这样做了,我就可以调用UIManager.put(,),它就工作了。

下面是更改组件L&F的解决方案

JFileChooser fc = new JFileChooser();
WindowsFileChooserUI wui = new WindowsFileChooserUI(fc);
wui.installUI(fc);
您可以从UI中找到所有现有的组件类

com.sun.java.swing.plaf.(L&F).*;

我只是好奇,为什么,为什么要覆盖我正在使用一个第三方组件来安装它自己的ui委托。我想自定义它的外观,所以我尝试覆盖用于第三方组件的默认ui。我不需要设置整个外观,只需要将一个组件的重要语句设置为粗体。对,但这是为了安装在单个组件上。我想委托也必须是
公共的
;我知道它不能嵌套。注意
UIManager
的拼写。是的,我相信你是正确的。是的,上面是o型(更正)。
com.sun.java.swing.plaf.(L&F).*;