2010-08-13 7 views
4

Je rencontre un problème subtile avec le SystemLookAndFeel Swing sous Windows 7. L'applet ci-dessous la SystemLookAndFeel et modifie alors la couleur de fond de MenuBar et MenuItem. Cela fonctionne parfaitement avec Windows XP et fonctionne aussi bien avec Windows 7 ayant le thème Windows Classic activé. Mais cela n'a aucun effet avec le thème standard de Windows 7. Quelqu'un at-il une explication pour cela?Impossible de modifier SystemLookAndFeel sous Windows 7

Cordialement, Martin.

import java.awt.BorderLayout; 
import java.awt.Color; 

import javax.swing.JApplet; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JMenuItem; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

@SuppressWarnings("serial") 
public class Win7TestApplet extends JApplet { 

    public void init() { 
     try { 
      UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
      UIManager.put("MenuBar.background", Color.decode("#efecea")); 
      UIManager.put("MenuItem.background", Color.decode("#9999ff")); 
     } catch (ClassNotFoundException e) { 
      e.printStackTrace(); 
     } catch (InstantiationException e) { 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      e.printStackTrace(); 
     } catch (UnsupportedLookAndFeelException e) { 
      e.printStackTrace(); 
     } 

     // Setup panel 
     JPanel mainPanel = new JPanel(); 
     mainPanel.setBackground(Color.white); 
     mainPanel.setLayout(new BorderLayout()); 
     mainPanel.setOpaque(true); 
     this.getContentPane().add(mainPanel, BorderLayout.CENTER); 

     // Create menubar 
     JMenuBar menuBar = new JMenuBar(); 
     getContentPane().add(menuBar, BorderLayout.NORTH); 

     // Add menu 
     JMenu m_file = new JMenu("File"); 
     menuBar.add(m_file); 

     // Add menu items 
     m_file.add(new JMenuItem("First item")); 
     m_file.add(new JMenuItem("Second item")); 
    } 

    public void start() {} 
    public void stop() {} 
    public void destroy() {} 
} 

Répondre

0

Je me suis répondu à ma question dans le Oracle Java Forum:

LookAndFeels ne sont pas tenus d'utiliser propriétés UIManager particulières.

Cela semble être juste trop juste.

Martin.

1

Windows 7 peut utiliser le NimbusLookAndFeel, qui a son propre defaults et une autre façon de define colors.

Addendum: Dans le cas contraire, vous devrez peut-être spécifier un ColorUIResource, par exemple

UIManager.put("MenuBar.background", 
    new ColorUIResource(Color.decode("#efecea"))); 
+0

Merci pour les liens, trashgod. L'aspect et la convivialité de Nimbus sont installés, mais le système par défaut est affiché sous la forme "L'apparence de Microsoft Windows - com.sun.java.swing.plaf.windows.WindowsLookAndFeel". En outre, l'utilisation de ColorUIResource ne change rien. Cela a-t-il fonctionné pour vous? D'autres idées? –

+0

@Martin: Désolé, non. Je peux confirmer votre résultat, et je vois le comportement attendu sur Aqua. Windows L & F peut simplement ignorer les paramètres par défaut du menu, mais je n'ai pas de référence. – trashgod

+0

Merci pour votre aide. Je vais essayer le forum Java quand j'ai réussi à réactiver mon compte. Ou je découvre comment faire un bogue avec Oracle. –

2

Martin vous pouvez utiliser ce lieu

UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel"); 
Questions connexes