Ustaw wygląd i koloryt
Używam Nimbus Look & Feel w mojej aplikacji Java Swing. L&F wygląda świetnie, ale muszę zmienić niektóre ustawienia (Czcionki, Kolory, ...), aby pasowały do tożsamości firmy mojej firmy.
Poniższy kod ustawia L&F całej aplikacji:
<pre><code>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() );
}
</code></pre>
Kod robi, co ma robić (ustawienie wyglądu i działania Nimbus). Problem polega na tym, żecustomizeNimbusLaF()
nie działa, jak oczekuję.
<pre><code>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 );
}
</code></pre>
Typy danych stałych wUIConstants
są albo typuColor
zFont
w zależności od ustawianego atrybutu.
Problem polega na tym, że zmienia się tylko kilka opcji look & feel. Opcje takie jak tło drzewa nie zmieniają się w zależności od opcji wyglądu i działania. Jestem tego świadomy, że kilka rzeczy się zmienia, jeśli zmienię malarza komponentu. Ale np. JPanel nie ma takiej własności malarza, ale także sprawia problemy.
Mam drugie pytanie dotyczące wyglądu i zachowania: czy malarze np. w menuBar powinien używać kolorów, które są ustawione w podstawowej sekcji kolorów, czy muszę zaimplementować moich własnych malarzy do tego użytku?
Czy ktoś może mi powiedzieć, gdzie jest mój problem?