2

我已将 JMenu 添加到未装饰的 JFrame 中,并且在将鼠标移到未绘制区域上之前不会绘制 JMenuItem。有没有人看到这个问题并知道如何解决/规避?这是一个显示问题的简化测试用例。

import java.awt.Color;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

public class TestCase {
public static void main(String[] args) throws Exception {
    new JFrame() {{
        setJMenuBar(new JMenuBar() {{
            setOpaque(true);
            add(new JMenu("ProblemMenu") {{
                setOpaque(true);
                add(new JMenuItem("NotPainted"){{
                    setOpaque(true);
                }});}});}});
        setUndecorated(true);
        setBackground(new Color(11,111,222,196));
        setSize(300,300);
        setLocation(300,300);
        getContentPane().setLayout(new FlowLayout());
        getContentPane().add(new JButton(" OpaqueButton "));
        setVisible(true);
    }};
}
}

在此处输入图像描述

单击菜单“ProblemMenu”,菜单将打开一个白色矩形,JMenuItem 应该位于该矩形。将鼠标移到该区域上,JMenuItem 就会绘制。

4

2 回答 2

1

每像素半透明 JFrame 菜单绘制问题是由 JRE 引起的,并通过移动到更新的 JRE ( 1.7.0_09-b05 ) 得到修复。

于 2012-10-17T02:08:41.950 回答
1

可能是 setOpaque() 调用与您的 LAF 结合使用。

阅读这个很好的答案,了解为什么 setOpaque() 有问题。

设置不透明(真/假);爪哇

于 2012-10-17T02:11:33.197 回答