2

我已将容器 JPanel 的背景颜色设置为部分透明。我有一个带有透明背景的 PNG 图像的 JLabel。我还有另一个图像,当鼠标悬停在标签上时会显示。我使用以下内容更改图标

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

这是一张图片

在此处输入图像描述

怎么了?

4

3 回答 3

2

有关可能发生的情况和一种潜在解决方案的说明,请参阅具有透明度的背景。

于 2013-02-03T18:30:43.437 回答
2

每次更新图标时都会稍微改变[半透明]......有什么问题?

平台具体实现的默认复合模式Graphics2DAlphaComposite.SRC_OVER,可能会产生你描述的效果。一个类似的问题,由于重复调用,在这里repaint()检查。

于 2013-02-03T13:05:55.067 回答
2

当您将 alpha 颜色应用于这样的组件时

content.setBackground(new Color(74, 137, 227, 60));

setBackground(new Color(74, 137, 227, 80));

您没有影响组件的 opacity 属性。这意味着重绘管理器不知道它需要重绘它下面的内容(因为就其而言,它们是不透明的)。

尝试将面板也设置为透明,并JComponent#setOpaque传递一个 false 值。

然后阅读 camickr 提供的链接

于 2013-02-03T21:45:42.377 回答