Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将鼠标悬停在JButton上会出现奇怪的颜色变化_Java_Swing_Colors_Jbutton_Mouselistener - Fatal编程技术网

Java 将鼠标悬停在JButton上会出现奇怪的颜色变化

Java 将鼠标悬停在JButton上会出现奇怪的颜色变化,java,swing,colors,jbutton,mouselistener,Java,Swing,Colors,Jbutton,Mouselistener,好吧,这是我在想使用透明度时遇到的一个问题 所以改变悬停背景的代码是 received.setMouseListener(new MouseAdapter() @Override public void mouseEntered(MouseEvent me) { received.setBackground(new Color(50,50,50,100)); } }); 开始时,我为按钮设置了蓝色 这是显示颜色变化的gif gifmemee09541718022

好吧,这是我在想使用透明度时遇到的一个问题

所以改变悬停背景的代码是

 received.setMouseListener(new MouseAdapter()
 @Override 
 public void mouseEntered(MouseEvent me) 
 {
        received.setBackground(new Color(50,50,50,100));
 } 
});
开始时,我为按钮设置了蓝色

这是显示颜色变化的gif

gifmemee09541718022016.gif

为什么会发生这种情况?
如果这不是正确的方法,那么正确的方法是什么

基本上,Swing只知道如何绘制透明和不透明组件,它不知道如何处理半透明组件,因此使用基于alpha的背景色会导致问题

相反,您需要通过控制组件背景的绘制方式来“伪造”它,例如


基本上,Swing只了解如何绘制透明和不透明组件,它不知道如何处理半透明组件,因此使用基于alpha的背景色会导致问题

相反,您需要通过控制组件背景的绘制方式来“伪造”它,例如


我很确定这段代码不会编译
received.setBackground(新颜色(50,50,50100);
为什么它不会编译?我已经添加了缺少的括号..Swing无法处理基于alpha的颜色,你需要进一步的“假”,你怎么做…?你能发布一个例子吗…我很确定这段代码不会编译
received.setBackground(新颜色(50,50,50100);
为什么不编译?我已经添加了缺少的括号..Swing无法处理基于alpha的颜色,您需要进一步的“假”它如何做到…?您可以发布一个示例吗…问题:设置
setOpaque(false);
是否对
isOpaque()进行覆盖< /代码>返回<代码> false <代码>必需的.@ TT。不,一个或另一个将工作,我可能会考虑离开<代码> iSubue<代码>,以防止人们改变它,这可能会导致更多的问题:设置为“代码> SETUBIQUICE(false);,并具有对<代码> IsPopAcE()的重写。< /代码>返回<代码> false <代码>必需的.@ TT。不,一个或另一个将工作,我可能会考虑离开<代码> iSubue<代码>,以防止人们改变它,这可能会导致更多的问题。
public class FakeTransperencyButton extends JButton {

    private float alpha = 0;

    public FakeTransperencyButton(String text) {
        super(text);
        setOpaque(false);
        setBackground(Color.RED);

        addMouseListener(new MouseAdapter() {
            @Override
            public void mouseEntered(MouseEvent e) {
                alpha = 0.4f;
                repaint();
            }

            @Override
            public void mouseExited(MouseEvent e) {
                alpha = 0f;
                repaint();
            }

        });
    }

    @Override
    public boolean isOpaque() {
        return false;
    }

    public float getAlpha() {
        return alpha;
    }

    protected void paintComponent(Graphics g) {
        Graphics2D g2d = (Graphics2D) g.create();
        g2d.setComposite(AlphaComposite.SrcOver.derive(getAlpha()));
        g2d.setColor(getBackground());
        g2d.fillRect(0, 0, getWidth(), getHeight());
        g2d.dispose();
        super.paintComponent(g);
    }

}