首页 > 代码库 > Swing - Nimbus Look and Feel Setting
Swing - Nimbus Look and Feel Setting
Swing - Nimbus Look and Feel Setting
一、Java 6和Java 7中设置Nimbus风格
在Java 6中Swing新增了一种界面风格-Nimbus,类名为com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel。
在Java 7更新之后,Nimbus风格的实现类移动到了javax.swing.plaf.nimbus.NimbusLookAndFeel,同时为了向后兼容,com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel纯粹直接继承自javax.swing.plaf.nimbus.NimbusLookAndFeel。
在正常情况下,我们可以使用以下方式来设置Nimbus风格(官方写法,这种写法在没有Nimbus支持的Java 5中就不会设置Nimbus,不至于引起报错):
try { for (LookAndFeelInfo info : UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) { UIManager.setLookAndFeel(info.getClassName()); break; } }} catch (Exception e) { // If Nimbus is not available, you can set the GUI to another look and feel.}
二、Nimbus修改默认设置的Bug和改进方案
这个设置本没有任何问题,但是当我们需要修改Nimbus的一些默认设置时,比如将整体风格的背景色设置为白色,我们会首先想到使用UIManger.put("background", Color.WHITE),但是很遗憾Nimbus对这种常规设置的支持有缺陷——不响应。经过四处查询解决方案,发现通过以下方式可以成功的设置Nimbus的一些设置(这种写法在Java 5中会报错,找不到类):
UIManager.setLookAndFeel(new NimbusLookAndFeel() { @Override public UIDefaults getDefaults() { UIDefaults defaults = super.getDefaults(); defaults.put("background", Color.WHITE); defaults.put("ScrollBar.width", 10); return defaults; }});
将代码片段2放在一个新的类的一个方法中,并将代码片段1中的行UIManager.setLookAndFeel(info.getClassName());替换为这个新方法,在Java 6中编译后,在Java 5中也可以运行,不会设置Nimbus风格也不会报错。
三、Desktop和Applet模式下的设置
将上面的设置Nimbus风格的代码放在一个方法中,SwingTool.setNimbusLookAndFeel()。
在Desktop模式下,在main()方法的第一句话加入:
SwingTool.setNimbusLookAndFeel()
而在Applet的启动方法init()的最后位置加上以下代码:
SwingTool.setNimbusLookAndFeel();SwingUtilities.updateComponentTreeUI(this);
请注意,Applet模式下一定要将上述代码放在init()方法的最后,放在方法开头是不生效的