更改其中的JMenuBar和JMenu对象的背景和文本颜色

如何为其中的JMenuBarJMenu对象设置自定义背景颜色? 我试过.setBackgroundColor它不起作用!

创建一个扩展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()设置背景颜色。

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

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

您也可以使用UIManager全局实现,例如:

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

最简单的方法(我能想到)是更改UIManager使用的默认值。 这将影响应用程序中的所有菜单栏和菜单项…

在此处输入图像描述

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

简单的方法是.setBackground(Color.RED)setOpaque(true)

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

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

我只有在改变时才工作:

  UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); 

至:

  UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName()); 

否则,颜色保持不变。