2011-10-03 30 views
6

我有一个JLabel,当鼠标进入它时,它会改变它的背景色。我遇到的问题是,我希望JLabel在鼠标退出后变为透明。使JLabel背景再次变为透明

有没有我可以用来完成这个声明?

+2

为了更好地提供帮助,请发布[SSCCE](http://pscode.org/sscce.html)。 –

回答

17

这是一个慵懒的假期在这里德国,所以结合两个答案:

final JLabel label = new JLabel("some label with a nice text"); 
    label.setBackground(Color.YELLOW); 
    MouseAdapter adapter = new MouseAdapter() { 

     /** 
     * @inherited <p> 
     */ 
     @Override 
     public void mouseEntered(MouseEvent e) { 
      label.setOpaque(true); 
      label.repaint(); 
     } 

     /** 
     * @inherited <p> 
     */ 
     @Override 
     public void mouseExited(MouseEvent e) { 
      label.setOpaque(false); 
      label.repaint(); 
     } 

    }; 
    label.addMouseListener(adapter); 

的问题(实际上,我倾向于把它作为一个bug)是设置不透明的属性不会触发重绘的将是适当的。 JComponent发起更改事件,但似乎没有人在听:

public void setOpaque(boolean isOpaque) { 
    boolean oldValue = getFlag(IS_OPAQUE); 
    setFlag(IS_OPAQUE, isOpaque); 
    setFlag(OPAQUE_SET, true); 
    firePropertyChange("opaque", oldValue, isOpaque); 
} 
+0

+1,我很惊讶repaint()不会自动完成。 – camickr

+0

@camickr我也是 – kleopatra

2

JLabel默认是透明和非不透明的,如果你想改变鼠标退出的背景下,那么你必须:

+1

实际上,没有..不需要切换_background color_ - 它不显示组件是否透明:-) – kleopatra