如何修复JLabel透明度错误?

时间:2013-10-01 16:33:06

标签: java swing jlabel transparent

我是Java新手,我想做的很简单,当鼠标进入标签区域时,我希望让JLabel具有透明色,并在鼠标时将标签设置为原始颜色离开标签区域。

我认为这很简单,并且在我的代码中可以工作但是当鼠标在标签上时我会得到一个奇怪的效果。这是我使用的代码:

在标签mouseEntered的事件中:

private void lblNuevoCLMouseEntered(java.awt.event.MouseEvent evt) {                                        
        // TODO add your handling code here:
        bgcolor=(new Color(0, 0, 0, 100));
        lblNuevoCL.setBackground(bgcolor); 
    }    

如果是mouseExited:

private void lblNuevoCLMouseExited(java.awt.event.MouseEvent evt) {                                       
    // TODO add your handling code here:
     lblNuevoCL.setBackground(new java.awt.Color(206,206,255));
}  

当鼠标进入标签(图像左侧的方块)时会发生这种情况: 它使用带有alpha的RGB颜色透明,但不透明 如图所示,标签上会出现一个奇怪的背景。

enter image description here

3 个答案:

答案 0 :(得分:3)

使JLabel不透明以允许设置背景颜色

lblNuevoCL.setOpaque(true);

答案 1 :(得分:3)

你需要做的是让JLabel的背景神奇地消失。这样做的方法是使用setOpaque()

setOpaque的作用是什么(取自文档):

  

如果true组件描绘其范围内的每个像素。       否则,组件可能无法绘制部分或全部像素,       允许底层像素显示。

最后一行解决了你的问题 当鼠标进入时,您使用lblNuevoCL.setOpaque(false);使其具有透明 背景
 鼠标退出lblNuevoCL.setOpaque(true);,以便返回原始颜色。这样,您不必担心背景是什么颜色。

请记住,Ubuntu的JLabel将具有与Windows不同的背景颜色。对颜色进行硬编码会使其看起来很奇怪。

答案 2 :(得分:1)

  

使用带有alpha

的RGB颜色变得透明

请参阅Backgrounds With Transparency,了解使用透明度时遇到的问题的解释(以及几个解决方案)。