KernelPanic
KernelPanic

Reputation: 2432

Change background and text color of JMenuBar and JMenu objects inside it

How can I set custom background color for JMenuBar and JMenu objects inside it? I tried .setBackgroundColor and it does not work!

Upvotes: 7

Views: 51354

Answers (8)

Adir Dayan
Adir Dayan

Reputation: 1617

nothing worked for me, only this code gave me something similar to what I tried to get:

fileMenu.getPopupMenu().setBorder(new LineBorder(Color.GRAY, 1));

Upvotes: 0

bhavna garg
bhavna garg

Reputation: 270

Simple way to do is by .setBackground(Color.RED) and setOpaque(true)

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

This will give the color of your choices to both the menubar and menu.

Upvotes: 2

Joaquin Gutierrez
Joaquin Gutierrez

Reputation: 11

public void run() {

     UIManager.put("MenuBar.background", new java.awt.Color(255, 245, 157));
     UIManager.put("MenuBar.opaque", true);                
     UIManager.put("Menu.background", new java.awt.Color(255, 245, 157));
     UIManager.put("Menu.opaque", true);
     UIManager.put("MenuItem.background",new java.awt.Color(255, 245, 157));
     UIManager.put("MenuItem.opaque", true);
     new MenuPrincipal().setVisible(true);

}

The menubar does not change color, but the rest do (menu and menuitem)

Upvotes: 1

user1831387
user1831387

Reputation:

It's very simple.

Here's the code:

menu.setBackground(Color.DARK_GRAY);

Similarly you can add your own color like GREEN, BLUE, DARK_GRAY, LIGHT_GRAY, BLACK, RED, etc..

This is the only simple way to change any color of any component in java.

Note: This is applicable for all components in Java Swing only. it is useless in JavaFX, JFace, SWT but not AWT and Swing

Thank you,

Dereck Smith

Upvotes: 0

D180
D180

Reputation: 742

Create a new class that extends 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);

    }
}

Now you use this class instead of JMenuBar and set the background color with setColor().

Upvotes: 15

Moonbeam
Moonbeam

Reputation: 11

Mine only worked when I changed:

    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

to:

    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

Otherwise, the colors remained the same.

Upvotes: 1

MadProgrammer
MadProgrammer

Reputation: 347184

The simplest way (I can think of) is to change the default values used by the UIManager. This will effect all the menu bars and menu items in the application though...

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);
            }

        });
    }

}

Upvotes: 6

tenorsax
tenorsax

Reputation: 21223

You would probably need to change opacity of menu items, ie:

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

You can also achieve that globally using UIManager, for example:

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

Upvotes: 13

Related Questions