在Swing外观中覆盖单个UI

时间:2012-02-28 19:36:51

标签: java swing look-and-feel

有没有办法用自定义的方式覆盖单个UI组件的L& F(不是它的单个实例,而是所有实例)?基本上我想覆盖它的L& F默认值。

看起来所有内容都在BasicLookAndFeel#getDefaults

中进行设置

我想如果我真的需要,我可以创建一个自定义的外观和感觉扩展我想要使用的那个并在initClassDefaults方法中覆盖它,但我更愿意只能覆盖任何UI目前正在使用。

我以为我可以做UIManager.put(<ui_class_id>,<my-delegate-classname>)

这似乎不适用于我正在处理的示例,但这可能是因为我正在尝试设置一个不属于标准外观的组件(组件自行添加)。我试图弄清楚这是否是正确的做法。

3 个答案:

答案 0 :(得分:2)

啊,问题是我忘了在我的UI中实现createUI。一旦我这样做,我就可以打电话给UIManager.put(<ui_class_id>,<my-delegate-classname>)并且它有效。

答案 1 :(得分:1)

From the Java Tutorials:

  

启动后改变外观

     

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

UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();

换句话说:您可以更改顶级容器的外观(如果仅限于顶级容器,或者此方法可以应用于任何容器,则我没有进行测试)。或者,更准确地回答你的问题:我没有看到设置单个组件的方法,但在(顶层)容器中有单一组件的方法

答案 2 :(得分:1)

以下是更改组件的L&amp; F的解决方案

JFileChooser fc = new JFileChooser();
WindowsFileChooserUI wui = new WindowsFileChooserUI(fc);
wui.installUI(fc);

您可以找到所有现有的组件类UI

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