我正在使用一个半透明的JPanel,里面有一些Swing组件,比如组合框和单选按钮。这看起来很棒,但当我将鼠标悬停在组合框和单选按钮上时,一切都搞砸了。即使在我设置了opaque false之后,这些组件的边框和单选按钮的文本背景也会出现奇怪的颜色。
我知道当你悬停鼠标时,这些组件会发生一些变化,但在我的情况下看起来并不好看。我不希望它发生。那么如何阻止呢?我的意思是它应该看起来和没有悬停时一样。
答案 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();
}
}