如何为其中的JMenuBar
和JMenu
个对象设置自定义背景颜色?我试过.setBackgroundColor
但它不起作用!
答案 0 :(得分:9)
您可能需要更改菜单项的不透明度,即:
JMenuItem item= new JMenuItem("Test");
item.setOpaque(true);
item.setBackground(Color.CYAN);
您也可以使用UIManager
全局实现,例如:
UIManager.put("MenuItem.background", Color.CYAN);
UIManager.put("MenuItem.opaque", true);
答案 1 :(得分:8)
创建一个扩展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()
设置背景颜色。
答案 2 :(得分:4)
最简单的方法(我能想到)是更改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);
}
});
}
}
答案 3 :(得分:1)
Mine只在我改变时才有效:
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
为:
UIManager.setLookAndFeel(UIManager.getCrossPlatformLookAndFeelClassName());
否则,颜色保持不变。
答案 4 :(得分:1)
简单的方法是.setBackground(Color.RED)
和setOpaque(true)
menubar.setBackground(Color.RED);
menu.setBackground(Color.yellow);
menubar.setOpaque(true);
menu.setOpaque(true);
这将为菜单栏和菜单提供您选择的颜色。
答案 5 :(得分:0)
这很简单。
以下是代码:
menu.setBackground(Color.DARK_GRAY);
类似地,您可以添加自己的颜色,例如GREEN, BLUE, DARK_GRAY, LIGHT_GRAY, BLACK, RED, etc..
这是更改Java中任何组件的任何颜色的唯一简单方法。
注意:这仅适用于Java Swing中的所有组件。它在JavaFX,JFace,SWT中没有用,但在AWT和Swing中却没用
谢谢
德里克·史密斯
答案 6 :(得分:0)
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);
}
菜单栏不会更改颜色,其余的会更改(菜单和菜单项)