java-在JMenuItem中设置图标可使菜单文本与图标颜色匹配
作者:互联网
添加菜单项时(无论是下面的示例中的硬编码还是使用Action),图标的颜色都会导致菜单项文本的颜色发生变化.这很奇怪,如果图标为白色或非常浅,则可能导致菜单项不可读.如何关闭此功能?在菜单项上调用setForeground(Color.black)不起作用.
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);
}
}
编辑:这发生在Mac Aqua L& F和我的应用程序的Windows中. SSCCE也会在Mac上导致这种情况,但奇怪的是,在Windows中. (Windows中还有其他UI差异:SSCCE在图标和文本之间有一个垂直分隔符;我的应用程序没有.)
解决方法:
听起来好像Graphics实例正在被图标和文本重用.在paintIcon的末尾添加g.setColor(Color.BLACK)会发生什么?
我会说这是L&F中的错误.也许最好存储图形的原始颜色,并在paintIcon的末尾将其还原.
标签:swing,jmenuitem,java 来源: https://codeday.me/bug/20191101/1986679.html