アイコンの色によって、メニュー項目のテキストの色が次のようになります(以下の例のようにハードコードされているかどうかにかかわらず)。変化する。これは奇妙で、白いアイコンや非常に明るいアイコンの場合は、メニュー項目を読むことができません。これをどうやって消すのですか?メニュー項目の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:これは私のアプリでマックアクアL & FおよびWindowsで発生します。 SSCCEはまた、これをMac上で引き起こしますが、Windowsでは奇妙なことではありません。 (Windowsには他にUIの違いがあります:アイコンとテキストの間にSSCCEに縦の区切りがあります;私のアプリはありません)
さて、あなたの 'paintIcon()'実装で 'x'と' y'オフセットを使うことを考えてみましょう。 – trashgod
@trashgod私はいつもやっていますが、このデモでは不要でした。いずれにしても、メモをありがとう。 – CajunLuke