При добавлении пункта меню (как жестко, как в моем примере ниже или с действием) цвет значка вызывает цвет текста элемента меню изменение. Это странно, и в случае белого или очень светлого значка может привести к тому, что элемент меню станет нечитаемым. Как отключить это? Вызов setForeground(Color.black)
по пункту меню не работает.Значок настройки в JMenuItem делает цвет значка текста меню
SSCCE:
import javax.swing.*;
import java.awt.*;
public class Test extends JFrame
{
public Test()
{
JMenuBar bar = new JMenuBar();
JMenu menu = new JMenu("menu");
menu.add(new JMenuItem("crap name", new Icon(){
@Override
public void paintIcon(Component c, Graphics g, int x, int y) {
g.setColor(Color.blue);
((Graphics2D)g).fill3DRect(0, 0, 8, 8, true);
}
@Override
public int getIconWidth() {
return 8;
}
@Override
public int getIconHeight() {
return 8;
}
}));
bar.add(menu);
setJMenuBar(bar);
}
public static void main(String[] args)
{
Test app = new Test();
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setVisible(true);
}
}
EDIT: Это происходит в Mac Аква L & F и в Windows, в моем приложении. SSCCE также вызывает это на Mac, но, как ни странно, в Windows. (В Windows существуют другие различия в пользовательском интерфейсе: у SSCCE есть вертикальный разделитель между значком и текстом, а в моем приложении нет.)
В качестве альтернативы рассмотрите использование смещений 'x' и' y' в реализации 'paintIcon()'. – trashgod
@trashgod Я обычно делаю, но для этой демонстрации это было необязательно. Спасибо за примечание в любом случае. – CajunLuke