gpt4 book ai didi

java - 悬停在 JButton 上时奇怪的颜色变化

转载 作者:行者123 更新时间:2023-11-29 03:00:16 25 4
gpt4 key购买 nike

好吧,这是我在想使用透明度时偶然发现的问题。

所以悬停时改变背景的代码是这样的……

 received.setMouseListener(new MouseAdapter()
@Override
public void mouseEntered(MouseEvent me)
{
received.setBackground(new Color(50,50,50,100));
}
});

一开始我为按钮设置了蓝色..

这是显示颜色变化的 gif...

GifMeme09541718022016.gif https://drive.google.com/file/d/0B9XFyaTVy8oYci1zMmRhMmtYcnM/view?usp=docslist_api

为什么会这样?如果这不是正确的方法,那么正确的方法是什么?

最佳答案

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

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

Alpha based hover

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);
}

}

关于java - 悬停在 JButton 上时奇怪的颜色变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35472993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com