Make JLabel background transparent again

前端 未结 2 855
面向向阳花
面向向阳花 2020-12-06 19:20

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.

相关标签:
2条回答
  • 2020-12-06 19:35

    JLabel is by default transparent and non-opaque, if you want to change background on mouse exit, then you have to:

    • setBackground() for both states, enter and exit

    • change to JPanel or another JComponent

    0 讨论(0)
  • 2020-12-06 19:40

    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);
    }
    
    0 讨论(0)
提交回复
热议问题