Reputation: 2432
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
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
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
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
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
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
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
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...
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
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