【发布时间】:2013-01-18 06:18:40
【问题描述】:
我已将容器 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));
这是一张图片
怎么了?
【问题讨论】:
-
如需尽快获得更好的帮助,请发帖SSCCE。
-
这么少的代码很难说。重新验证容器并重新绘制可能会解决问题,但这只是一个猜测。在旁注中,不要在每次鼠标进入或存在时创建一个新的
ImageIcon对象!将这两个图像存储为字段,并且只加载一次(例如在构造函数中)。 -
部分透明的问题,JVM没有完全重绘屏幕上的脏区。
-
感谢@HovercraftFullOfEels!我在上面的方法中添加了
repaint(),它解决了这个问题。请发布它作为答案。也感谢@Dejan,我按照你所说的只加载图像一次。 -
另外,确保所有容器的不透明度设置为 false(JPanel 的默认值为 true,这可能会导致绘制具有不完全不透明颜色/图标的伪像)
标签: java image swing background jpanel