更新JLabel图标会使背景变得混乱

时间:2013-02-03 10:49:55

标签: java image swing background jpanel

我已将容器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));

这是一张图片

enter image description here

有什么问题?

3 个答案:

答案 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提供的链接