在Swing外观和感觉中覆盖单个UI
是否有一种方法可以用自定义代码覆盖单个UI组件的L & F(不是它的单个实例,而是所有实例)?基本上我想重写它的默认值L &。在Swing外观和感觉中覆盖单个UI
看起来这一切变得安装在BasicLookAndFeel#getDefaults
我想,如果我真的需要我可以创建自定义的外观和感觉,它扩展了一个我想使用,并在initClassDefaults
方法来覆盖它,但我宁愿只是能够覆盖当前正在使用的任何UI。
我想我可能只是做UIManager.put(<ui_class_id>,<my-delegate-classname>)
这似乎并不为我工作的例子中工作,但可能是因为我正在尝试设置,这不是部分的组件标准的外观和感觉(组件自行添加)。我试图弄清楚这是否是正确的方法。
改变外观和感觉启动
后你甚至可以在程序的GUI 后更改为L & f控制setLookAndFeel是可见的。要使现有组件反映新的L & F, 将调用SwingUtilities的updateComponentTreeUI方法,每个 *容器。然后,您可能希望调整每个*容器的大小以反映其包含组件的新大小。对于 例如:
UIManager.setLookAndFeel(lnfName);
SwingUtilities.updateComponentTreeUI(frame);
frame.pack();
换句话说:你可以改变它的外表和顶层容器的感觉(我没有测试它是否仅限于或者如果顶层容器方法可以应用于任何容器)。或者,更准确地回答你的问题:我没有看到有一种方法来设计零件,但是有一种方法可用于(*)容器中的单个零件。
我不需要设置整个外观和感觉,只是一个组件 – 2012-02-28 20:23:35
现在以粗体显示的重要说明。 – phineas 2012-02-28 20:33:55
可以
1)覆盖UIDefaults
2)创建为每个JComponent
类可用于,在那里你可以overload/override
重要的方法
3)不要重新发明*和使用(免费)Custom Look and Feel,其中大部分历史悠久,如此之快BugParade
历史
我正在尝试使用现有的L&F。我只想重写一个组件。 – 2012-02-28 20:23:54
肯定的答案可能是,你的Conponent是基于AWT还是Swing ???,如果是,那么@camickr UIDefaults将返回UIManager v.s.中的所有项目。标准的外观和感觉, – mKorbel 2012-02-28 20:35:16
下面是解改变A L & F代表一个组件
JFileChooser fc = new JFileChooser();
WindowsFileChooserUI wui = new WindowsFileChooserUI(fc);
wui.installUI(fc);
你可以找到所有现有的组件类UI从
com.sun.java.swing.plaf.(L&F).*;
只是我的好奇心,请为什么,为什么重写[ UIDefaults](http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/) – mKorbel 2012-02-28 19:46:03
我正在使用安装自己的UI代表的第三方组件。我想定制它的外观,所以我试图覆盖用于该第三方组件的默认UI。 – 2012-02-28 19:52:55