Search code examples
javaswingtransparencymouseeventjlabel

Make JLabel background transparent again


I have a JLabel that changes its background color when the mouse enters it. The problem I have is that I want the JLabel to become transparent after the mouse exits.

Is there a statement I can use to accomplish this?


Solution

  • It's a lazy holiday here in Germany, so combining the two answers:

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

    The problem (actually, I tend to regard it as a bug) is that setting the opaque property doesn't trigger a repaint as would be appropriate. JComponent fires a change event, but seems like nobody is listening:

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