如何停止摇摆组件的悬停变化?

时间:2014-07-05 21:00:13

标签: java swing awt

我正在使用一个半透明的JPanel,里面有一些Swing组件,比如组合框和单选按钮。这看起来很棒,但当我将鼠标悬停在组合框和单选按钮上时,一切都搞砸了。即使在我设置了opaque false之后,这些组件的边框和单选按钮的文本背景也会出现奇怪的颜色。

我知道当你悬停鼠标时,这些组件会发生一些变化,但在我的情况下看起来并不好看。我不希望它发生。那么如何阻止呢?我的意思是它应该看起来和没有悬停时一样。

1 个答案:

答案 0 :(得分:3)

Swing只知道如何绘制透明或不透明的组件,它不知道如何在两者之间绘制任何东西。

为此,我需要将面板设置为透明(不透明false)并覆盖其paintComponent方法并自行绘制透明度填充...

public class TranslucentPanel extends JPanel {
    public TranslucentPanel() {
        setOpaque(false);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);
        Graphics2D g2d = (Graphics2D)g;
        g2d.setComposite(AlphaComposite.SrcOver.derive(0.5f));
        g2d.fillRect(0, 0, getWidth(), getHeight());
        g2d.dispose();
    }
}