2

装飾されていないJFrameにJMenuを追加しましたが、マウスをペイントされていない領域に移動するまで、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

LAFと組み合わせたsetOpaque()呼び出しである可能性があります。

setOpaque()が問題となる理由については、このすばらしい回答をお読みください。

setOpaque(true / false); Java

于 2012-10-17T02:11:33.197 に答える