Как изменить цвет / шрифт текста ярлыка в java JMenuItem (ctrl+s)

Как видно из заголовка, я пытаюсь найти способ установить цвет этого ярлыка:

Любые идеи были бы хорошы.

Бонусные баллы, если есть способ изменить цвет при наведении курсора. (похоже на это я ожидаю:)

UIManager.put("MenuItem.selectionBackground", Color.GREEN);

РЕДАКТИРОВАТЬ: ...

    //SET DEFAULT COLOR STYLE FOR MENU
    //UIManager.put("TabbedPane.selected", Color.GREEN);
    UIManager.put("MenuItem.selectionBackground", bgMenuHover);
    UIManager.put("MenuItem.selectionForeground", fgMenuHover);
    UIManager.put("MenuItem.background", bgMenu);
    UIManager.put("MenuItem.foreground", fgMenu);
    UIManager.put("Menu.selectionBackground", bgMenuHover);
    UIManager.put("Menu.selectionForeground", fgMenuHover);
    UIManager.put("Menu.background", bgMenu);
    UIManager.put("Menu.foreground", fgMenu);
    UIManager.put("MenuBar.selectionBackground", bgMenuHover);
    UIManager.put("MenuBar.selectionForeground", fgMenuHover);
    UIManager.put("MenuBar.background", bgMenu);
    UIManager.put("MenuBar.foreground", fgMenu);
    UIManager.put("PopupMenu.border", BorderFactory.createLineBorder(bgMenu, 1));
    //UIManager.put("PopupMenu.forground", Color.CYAN);


    //END DEFAULT COLOR STYLE FOR MENU
...

//create menu bar
    JMenuBar menuBar = new JMenuBar();
    menuBar.setOpaque(true);

    menuBar.setBorder(null);
    menuBar.setFont(font2);

    // build first menu
    JMenu menu = new JMenu("File");
    menu.setMnemonic(KeyEvent.VK_A);
    menu.getAccessibleContext().setAccessibleDescription("NOTHING HERE YET");
    menu.setOpaque(true);

    menu.setBorder(null);
    menu.setFont(font2);
    menuBar.add(menu);


    //a group of JMenuItems
    JMenuItem menuItem = new JMenuItem("Save", KeyEvent.VK_S);
    menuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
    menuItem.getAccessibleContext().setAccessibleDescription("THIS DOES NOTHIGN YET");
    menuItem.setOpaque(true);

    menuItem.setFont(font2);
    menu.add(menuItem);

    ...

1 ответ

Решение

Изменить цвет текста ярлыка jmenuitem в виде нимба

MenuItem:MenuItemAccelerator[MouseOver].textForeground имущество

изменить переопределение цвета фона наведения мыши

MenuItem[MouseOver].backgroundPainter

пример

for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
    if ("Nimbus".equals(info.getName())) {
        javax.swing.UIManager.setLookAndFeel(info.getClassName());
         UIManager.getLookAndFeelDefaults().put("MenuItem:MenuItemAccelerator[MouseOver].textForeground",Color.yellow);
         UIManager.getLookAndFeelDefaults().put("MenuItem[MouseOver].backgroundPainter",
                new mypainter(Color.RED));

        break;
    }
}

и класс mypainter

class mypainter implements Painter<JComponent> {

    private Color color=null;

    public mypainter(Color c) {
        color = c;
    }

    @Override
    public void paint(Graphics2D g, JComponent object, int width, int height) {
        g.setColor(color);
        g.fillRect(0, 0, width, height);
    }

}

..........................Обновить.....................................

чтобы изменить текст ярлыка меню в металлическом стиле, вы можете переопределить свойствоMenuItem.acceleratorForeground

попробуйте запустить следующий класс

import java.awt.Color;
import java.awt.Dimension;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.UIManager;

public class myframe extends JFrame{

    public myframe()  {
        super("Java Menubar Example");
        JMenuBar menuBar = new JMenuBar();

        JMenu fileMenu = new JMenu("File");
        JMenuItem openMenuItem = new JMenuItem("save");
        openMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_S, java.awt.event.InputEvent.CTRL_MASK));
        fileMenu.add(openMenuItem);
        menuBar.add(fileMenu);
        setJMenuBar(menuBar);

        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setPreferredSize(new Dimension(400, 300));
        pack();
        setLocationRelativeTo(null);
        setVisible(true);
    }

    public static void main(String[] args) {
        UIManager.getLookAndFeelDefaults().put("MenuItem.acceleratorForeground", Color.red);
        myframe myframe = new myframe();

    }
}
Другие вопросы по тегам