我已将容器JPanel的背景颜色设置为部分透明。我有一个JLabel,其PNG图像具有透明背景。我还有另一张图像,当鼠标悬停在标签上时会显示该图像。我使用以下内容更改图标
private void settingsMouseEntered(java.awt.event.MouseEvent evt) {
this.settings.setIcon(new ImageIcon(getClass().getResource("/Resources/settingsIconHover.png")));
}
private void settingsMouseExited(java.awt.event.MouseEvent evt) {
this.settings.setIcon(new ImageIcon(getClass().getResource("/Resources/settingsIcon.png")));
}
每次更新图标时,它会稍微改变不透明度。最终背景不再透明。
我已使用以下代码
设置了JPanel的背景content.setBackground(new Color(74, 137, 227, 60));
JPanel位于JFrame中,它还具有特定的背景
setBackground(new Color(74, 137, 227, 80));
这是一张图片
有什么问题?
答案 0 :(得分:2)
每次更新图标时,它会稍微改变[半透明度] ......出了什么问题?
平台Graphics2D
的具体实现的默认复合模式是AlphaComposite.SRC_OVER
,这可能会产生您描述的效果。由于重复调用repaint()
而导致的类似问题会被检查here。
答案 1 :(得分:2)
请参阅Backgrounds With Transparency,了解可能发生的情况和一种可能的解决方案。
答案 2 :(得分:2)
将alpha颜色应用于此类组件时
content.setBackground(new Color(74, 137, 227, 60));
和
setBackground(new Color(74, 137, 227, 80));
您没有影响组件的opacity属性。这意味着重绘管理器不知道它需要重新绘制其下面的内容(因为就其而言,它是不透明的)。
尝试将面板设置为透明,使用JComponent#setOpaque
传递假值。
然后阅读camickr提供的链接