2012-02-28 60 views
3

是否有一种方法可以用自定义代码覆盖单个UI组件的L & F(不是它的单个实例,而是所有实例)?基本上我想重写它的默认值L &。在Swing外观和感觉中覆盖单个UI

看起来这一切变得安装在BasicLookAndFeel#getDefaults

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

我想我可能只是做UIManager.put(<ui_class_id>,<my-delegate-classname>)

这似乎并不为我工作的例子中工作,但可能是因为我正在尝试设置,这不是部分的组件标准的外观和感觉(组件自行添加)。我试图弄清楚这是否是正确的方法。

+1

只是我的好奇心,请为什么,为什么重写[ UIDefaults](http://tips4java.wordpress.com/2008/10/09/uimanager-defaults/) – mKorbel 2012-02-28 19:46:03

+0

我正在使用安装自己的UI代表的第三方组件。我想定制它的外观,所以我试图覆盖用于该第三方组件的默认UI。 – 2012-02-28 19:52:55

回答

1

From the Java Tutorials:

改变外观和感觉启动

你甚至可以在程序的GUI 后更改为L & f控制setLookAndFeel是可见的。要使现有组件反映新的L & F, 将调用SwingUtilities的updateComponentTreeUI方法,每个 顶级容器。然后,您可能希望调整每个顶级容器的大小以反映其包含组件的新大小。对于 例如:

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

换句话说:你可以改变它的外表和顶层容器的感觉(我没有测试它是否仅限于或者如果顶层容器方法可以应用于任何容器)。或者,更准确地回答你的问题:我没有看到有一种方法来设计零件,但是有一种方法可用于(顶级)容器中的单个零件。

+0

我不需要设置整个外观和感觉,只是一个组件 – 2012-02-28 20:23:35

+0

现在以粗体显示的重要说明。 – phineas 2012-02-28 20:33:55

1

可以

1)覆盖UIDefaults

2)创建为每个JComponent类可用于,在那里你可以overload/override重要的方法

3)不要重新发明轮子和使用(免费)Custom Look and Feel,其中大部分历史悠久,如此之快BugParade历史

+0

我正在尝试使用现有的L&F。我只想重写一个组件。 – 2012-02-28 20:23:54

+0

肯定的答案可能是,你的Conponent是基于AWT还是Swing ???,如果是,那么@camickr UIDefaults将返回UIManager v.s.中的所有项目。标准的外观和感觉, – mKorbel 2012-02-28 20:35:16

1

嗯,问题是我忘了进行nt createUI在我的用户界面。一旦我这样做了,我就可以打电话给UIManager.put(<ui_class_id>,<my-delegate-classname>),它工作。

+0

有一个相关的例子[这里](http://stackoverflow.com/a/3008587/230513)。 – trashgod 2012-02-28 20:46:12

+0

没错,但这是为了安装在一个组件上 – 2012-02-28 20:51:38

+0

我认为代理也必须是“公共”;我知道它不能嵌套。请注意'UIManager'的拼写。 – trashgod 2012-02-28 23:13:53

0

下面是解改变A L & F代表一个组件

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

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

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