2013-03-26 1 views
2

Comment puis-je définir une couleur d'arrière-plan personnalisée pour les objets JMenuBar et JMenu à l'intérieur? J'ai essayé .setBackgroundColor et ça ne marche pas!Modification de la couleur d'arrière-plan et du texte des objets JMenuBar et JMenu à l'intérieur

+2

Le problème peut être lié à LAF. En utilisant le LAF par défaut, il vous suffit de définir l'arrière-plan de la barre de menus et le menu héritera de cette couleur car elle n'est pas opaque. Publiez votre SSCCE qui démontre le problème. Si vous ne savez pas ce qu'est un SSCCE, vous pouvez toujours chercher sur le web. – camickr

+1

à droite, d'accord pour Nimbus L & A – mKorbel

Répondre

7

Créer une nouvelle classe qui étend JMenuBar:

public class BackgroundMenuBar extends JMenuBar { 
    Color bgColor=Color.WHITE; 

    public void setColor(Color color) { 
     bgColor=color; 
    } 

    @Override 
    protected void paintComponent(Graphics g) { 
     super.paintComponent(g); 
     Graphics2D g2d = (Graphics2D) g; 
     g2d.setColor(bgColor); 
     g2d.fillRect(0, 0, getWidth() - 1, getHeight() - 1); 

    } 
} 

Maintenant, vous utilisez cette classe au lieu de JMenuBar et définir la couleur de fond avec setColor().

7

Vous auriez probablement besoin de changer l'opacité des éléments du menu, à savoir:

JMenuItem item= new JMenuItem("Test"); 
item.setOpaque(true); 
item.setBackground(Color.CYAN); 

Vous pouvez également réaliser que globalement en utilisant UIManager, par exemple:

UIManager.put("MenuItem.background", Color.CYAN); 
UIManager.put("MenuItem.opaque", true); 
4

La façon la plus simple (je peux penser de) est de changer les valeurs par défaut utilisées par le UIManager. Cela affectera toutes les barres de menus et éléments de menu dans l'application mais ...

enter image description here

import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JMenu; 
import javax.swing.JMenuBar; 
import javax.swing.JPanel; 
import javax.swing.UIManager; 
import javax.swing.UnsupportedLookAndFeelException; 

public class TestMenuBar { 

    public static void main(String[] args) { 
     new TestMenuBar(); 
    } 

    public TestMenuBar() { 
     EventQueue.invokeLater(new Runnable() { 
      @Override 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 
       } catch (ClassNotFoundException ex) { 
       } catch (InstantiationException ex) { 
       } catch (IllegalAccessException ex) { 
       } catch (UnsupportedLookAndFeelException ex) { 
       } 

       UIManager.put("MenuBar.background", Color.RED); 
       UIManager.put("Menu.background", Color.GREEN); 
       UIManager.put("MenuItem.background", Color.MAGENTA); 

       JMenu mnu = new JMenu("Testing"); 
       mnu.add("Menu Item 1"); 
       mnu.add("Menu Item 2"); 

       JMenuBar mb = new JMenuBar(); 
       mb.add(mnu); 
       mb.add(new JMenu("Other")); 

       JFrame frame = new JFrame("Test"); 
       frame.setJMenuBar(mb); 
       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       frame.setLayout(new BorderLayout()); 
       frame.add(new JPanel()); 
       frame.pack(); 
       frame.setLocationRelativeTo(null); 
       frame.setVisible(true); 
      } 

     }); 
    } 

} 
0

mine ne fonctionnait quand j'ai changé:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 

à:

UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 

Sinon, les couleurs sont restées les mêmes.

0

façon simple est par .setBackground(Color.RED) et setOpaque(true)

menubar.setBackground(Color.RED); menu.setBackground(Color.yellow); menubar.setOpaque(true); menu.setOpaque(true);

Cela donnera la couleur de votre choix à la fois la barre de menus et le menu.

Questions connexes