0

我在半透明的 JPanel 上放置了一个半透明的 JCheckBox 对象。当我将鼠标光标移到 JCheckBox 对象上时,它会在原始 JCheckBox 对象顶部重新绘制 JCheckBox 对象,这些对象与原始 JCheckBox 对象相比有几个单元格。

我想要它做的是在我将鼠标光标移到它上面后看起来完全一样。

之前(鼠标光标不在 JCheckBox 对象上):

http://i.imgur.com/J6zZwuD.png

之后(鼠标光标在 JCheckBox 对象上):

http://i.imgur.com/Wygqq4o.png

代码:

import java.awt.Color;
import java.awt.Graphics;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

class TransparentPanel extends JPanel{
    public TransparentPanel(){
        super();
        setOpaque(false);
        setBackground(new Color(0, 0, 0, 100));

        JCheckBox checkBox=new JCheckBox("Check Box"){
            protected void paintComponent(Graphics g){
                g.setColor(getBackground());
                g.fillRect(0, 0, getWidth(), getHeight());
                super.paintComponent(g);
            }
        };
        checkBox.setFocusable(false);
        checkBox.setOpaque(false);
        checkBox.setBackground(new Color(200, 200, 200, 50));
        add(checkBox);
    }
    @Override
    protected void paintComponent(Graphics g){
        g.setColor(getBackground());
        g.fillRect(0, 0, getWidth(), getHeight());
        super.paintComponent(g);
    }
    public static void main(String[] args){
        JFrame frame=new JFrame();
        frame.setSize(200, 100);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.add(new TransparentPanel());
        frame.setVisible(true);
    }
}

对不起,如果这已经被问到了。我找遍了,我找不到有同样问题的人。如果这篇文章不是合法的 SSCCE,再次抱歉。这是我在这里的第一篇文章。

编辑1:编辑代码。问题依然存在。

编辑 2:代码现在可以工作了。

4

1 回答 1

2

有关绘画如何工作的说明以及您可以使用的解决方案,请参阅具有透明度的背景。

在这种情况下,我猜您需要将 TransparentPanel 和 checkBox 添加到单独的AlphaContainer.

于 2013-09-15T23:28:38.243 回答