更改 JMenuBar 及其内部 JMenu 对象的背景和文本颜色

问题描述 投票:0回答:7

如何为其中的

JMenuBar
JMenu
对象设置自定义背景颜色?我尝试了
.setBackgroundColor
,但不起作用!

java swing look-and-feel jmenu jmenubar
7个回答
14
投票

创建一个扩展的新类

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

    }
}

现在您使用此类而不是

JMenuBar
并使用
setColor()
设置背景颜色。


12
投票

您可能需要更改菜单项的不透明度,即:

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

您还可以使用

UIManager
全局实现这一点,例如:

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

6
投票

最简单的方法(我能想到的)是更改

UIManager
使用的默认值。但这将影响应用程序中的所有菜单栏和菜单项...

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

        });
    }

}

2
投票

简单的方法是通过

.setBackground(Color.RED)
setOpaque(true)

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

这将为菜单栏和菜单提供您选择的颜色。


1
投票

我的只有在我改变时才起作用:

    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

至:

    UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());

否则,颜色保持不变。


1
投票
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);

}

菜单栏不会改变颜色,但其余部分(菜单和菜单项)会改变颜色


0
投票

非常简单。

代码如下:

menu.setBackground(Color.DARK_GRAY);

同样,您可以添加自己的颜色,例如

GREEN, BLUE, DARK_GRAY, LIGHT_GRAY, BLACK, RED, etc..

这是更改 java 中任何组件的任何颜色的唯一简单方法。

注意: 这仅适用于 Java Swing 中的所有组件。它在 JavaFX、JFace、SWT 中没有用,但在 AWT 和 Swing 中没有用

谢谢你,

德里克·史密斯

© www.soinside.com 2019 - 2024. All rights reserved.