设置外观颜色(Set look and feel color)

2019-06-28 05:33发布

我用我的Java Swing应用程序中的灵气外观和感觉。 在L&F看起来不错,但我需要更改一些设置(字体,颜色,...),以适合我公司的企业形象。

以下代码设置整个应用程序的L&F:

 try { for( LookAndFeelInfo info : UIManager.getInstalledLookAndFeels() ) { if( "Nimbus".equals( info.getName() ) ) { UIManager.setLookAndFeel(info.getClassName()); customizeNimbusLaF(); break; } } } catch( Exception e ) { LogUtility.warning( "cannot set application look and feel" ); LogUtility.warning( e.getMessage() ); } 


该代码做,什么是应该做的(设置Nimbus的外观和感觉)。 问题是,该customizeNimbusLaF()不工作,因为我希望它做的事。

 private final void customizeNimbusLaF() { UIManager.put( "control" , UIConstants.GREY_LIGHT ); UIManager.put( "nimbusAlertYellow" , UIConstants.YELLOW ); UIManager.put( "nimbusBase" , UIConstants.GREY_DARK ); UIManager.put( "nimbusDisabledText" , UIConstants.GREY_DARK ); UIManager.put( "nimbusFocus" , UIConstants.BLUE_LIGHT ); UIManager.put( "nimbusGreen" , UIConstants.GREEN ); UIManager.put( "nimbusInfoBlue" , UIConstants.BLUE_MIDDLE ); UIManager.put( "nimbusRed", UIConstants.RED ); UIManager.put( "nimbusSelectionBackground", UIConstants.BLUE_MIDDLE ); UIManager.put( "background" ,UIConstants.GREY_LIGHT ); UIManager.put( "controlDkShadow" , UIConstants.GREY_DARK ); UIManager.put( "controlShadow", UIConstants.GREY_MIDDLE ); UIManager.put( "desktop", UIConstants.BLUE_MIDDLE ); UIManager.put( "menu", UIConstants.GREY_LIGHT ); UIManager.put( "nimbusBorder", UIConstants.GREY_MIDDLE ); UIManager.put( "nimbusSelection", UIConstants.BLUE_MIDDLE ); UIManager.put( "textBackground", UIConstants.BLUE_LIGHT ); UIManager.put( "textHighlight", UIConstants.BLUE_LIGHT ); UIManager.put( "textInactiveText", UIConstants.GREY_MIDDLE ); // panel UIManager.put( "Panel.background", UIConstants.GREY_LIGHT ); UIManager.put( "Panel.disabled", UIConstants.GREY_LIGHT ); UIManager.put( "Panel.font", UIConstants.DEFAULT_FONT ); UIManager.put( "Panel.opaque", true ); // button UIManager.put( "Button.background", UIConstants.GREY_LIGHT ); UIManager.put( "Button.disabled", UIConstants.GREY_LIGHT ); UIManager.put( "Button.disabledText", UIConstants.BLUE_MIDDLE ); UIManager.put( "Button.font", UIConstants.DEFAULT_FONT ); // menu UIManager.put( "Menu.background", UIConstants.GREY_LIGHT ); UIManager.put( "Menu.disabled", UIConstants.GREY_LIGHT ); UIManager.put( "Menu.disabledText", UIConstants.GREY_DARK ); UIManager.put( "Menu.font", UIConstants.MENU_FONT ); UIManager.put( "Menu.foreground", UIConstants.BLACK ); UIManager.put( "Menu[Disabled].textForeground", UIConstants.GREY_MIDDLE ); UIManager.put( "Menu[Enabled].textForeground", UIConstants.BLACK ); UIManager.put( "MenuBar.background", UIConstants.GREY_LIGHT ); UIManager.put( "MenuBar.disabled", UIConstants.GREY_LIGHT ); UIManager.put( "MenuBar.font", UIConstants.MENU_FONT ); UIManager.put( "MenuBar:Menu[Disabled].textForeground", UIConstants.GREY_MIDDLE ); UIManager.put( "MenuBar:Menu[Enabled].textForeground", UIConstants.BLACK ); UIManager.put( "MenuItem.background", UIConstants.GREY_LIGHT ); UIManager.put( "MenuItem.disabled", UIConstants.GREY_LIGHT ); UIManager.put( "MenuItem.disabledText", UIConstants.GREY_MIDDLE ); UIManager.put( "MenuItem.font", UIConstants.MENU_FONT ); UIManager.put( "MenuItem.foreground", UIConstants.BLACK ); UIManager.put( "MenuItem[Disabled].textForeground", UIConstants.GREY_MIDDLE ); UIManager.put( "MenuItem[Enabled].textForeground", UIConstants.BLACK ); // tree UIManager.put( "Tree.background", UIConstants.BLACK ); } 


在常量的数据类型UIConstants是任一类型的ColorFont取决于属性的被设置。

问题是,只有少数的外观和感觉的选择而改变。 像树的背景选项,根据对外观和感觉的选项并没有改变。 我知道这一点,这几件事情只改变,如果我改变一个组件的画家。 但如JPanel中没有这样的画家属性,反而使得问题了。

我有一个关于外观和感觉第二个问题:是不是EG的画家菜单栏应该使用的颜色,这是基色部分设置,或者我需要实现我自己的画家用于该用途?

谁能告诉我在哪里,我的问题是什么?

Answer 1:

1.设置更改是有点哈克,必须设置L&F,然后是后可能做出任何更改instaled L&F

伪代码

if( "Nimbus".equals( info.getName() ) ) {
   UIManager.setLookAndFeel(info.getClassName());
   UIManager.getLookAndFeelDefaults().put("Xxx", "Xxx")
   UIManager.getLookAndFeelDefaults().put("Xxx", "Xxx")
   break;
}

2.Font和颜色的部分被存储为XxxUIResources所有秋千L&FS和所需XxxUIResources另一劈 ,

3.better可以使用UIManager的默认值由@camickr为instaled方法列表,而不是搜索到NimbusDefaults

4. 关于画家 ,你可以设置自己的画家(类型或值的UIDefaults的依赖),或覆盖XxxUIResources(依赖型的,有时,somewere不工作,因为雨云的发展somwhere结束了第二quaters的。)

编辑

5. 闲来无事左右 ,我认为@aephyr参加的Nimbus development或EI ???



Answer 2:

我发现的主要问题。 我没有叫SwingUtilities.updateComponentTreeUI( window )把所有的外观和感觉特性到的UIDefaults后。

现在,它执行我打算的方式。

另一个问题是:有没有指定整个应用程序的首选字体的方法吗?



文章来源: Set look and feel color