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

放肆的年华 提交于 2019-11-28 00:29:44
D180

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().

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

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

        });
    }

}

Mine only worked when I changed:

    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

to:

    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

Otherwise, the colors remained the same.

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.

Dereck Smith Elijah

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.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!