2011-10-03 84 views
6

Tengo una JLabel que cambia el color de fondo cuando el mouse entra en ella. El problema que tengo es que quiero que el JLabel se vuelva transparente después de que el mouse sale.Hacer que el fondo de JLabel sea transparente nuevamente

¿Existe alguna declaración que pueda usar para lograr esto?

+2

Para una mejor ayuda antes, publique un [SSCCE] (http://pscode.org/sscce.html). –

Respuesta

17

es un día de fiesta perezoso aquí en Alemania, por lo la combinación de las dos respuestas:

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

El problema (en realidad, tienden a considerarlo como un error) es que al establecer la propiedad opaca no desencadena un repintado como sería apropiado. JComponent dispara un evento de cambio, pero parece que nadie está escuchando:

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

+1, me sorprende que el repintado() no se realice automáticamente. – camickr

+0

@camickr yo también – kleopatra

2

JLabel es por defecto transparente y no opaco, si desea cambiar el fondo a la salida del ratón, entonces usted tiene que:

+1

en realidad, no .. no hay necesidad de alternar el _color de fondo_ - no se muestra si el componente es transparente :-) – kleopatra

Cuestiones relacionadas