How do I make the JPanel more transparent and transparent and finally disappear?

I want to create a panel that expands JPanel

and when it becomes visible it becomes more transparent and transparent and finally disappears. what is the problem with my code?

public class BaloonPanel extends JPanel
{

private float transparency = 1f;
Timer timer;

public BaloonPanel()
{

    setBackground(Color.white);
    ActionListener action = new ActionListener()
    {
        @Override
        public void actionPerformed(ActionEvent e)
        {
            transparency = transparency - 0.01f;

            if (transparency < 0.0f)
            {
                timer.stop();
            }
            repaint();
        }
    };

    timer = new Timer(100, action);
    timer.start();
}

@Override
public void paint(Graphics g)
{
    Graphics2D g2 = (Graphics2D) g.create();
    g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, transparency));
    super.paint(g2);
    g2.dispose();
}

      

}

+3


source to share


1 answer


Since it is BallonPanel

opaque, the redraw manager does not interfere with painting under it. This is an optimization of the drawing process, why draw something that does not need to be painted.

You need to "persuade" the artist to paint underneath your component while maintaining its background.



Set BallonPanel

transparent ( setOpaque(false)

) and update the method paint

to fill the background.

public class FadePane {

    public static void main(String[] args) {
        new FadePane();
    }

    public FadePane() {
        EventQueue.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
                } catch (Exception ex) {
                }

                JFrame frame = new JFrame("Test");
                frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                frame.getContentPane().setBackground(Color.BLUE);
                frame.setBackground(Color.BLUE);
                frame.add(new BaloonPanel());
                frame.pack();
                frame.setLocationRelativeTo(null);
                frame.setVisible(true);

            }
        });
    }

    public class BaloonPanel extends JPanel {

        private float transparency = 1f;
        Timer timer;

        public BaloonPanel() {

            setBackground(Color.white);
            ActionListener action = new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    transparency = transparency - 0.1f;

                    if (transparency < 0.1f) {
                        transparency = 0;
                        timer.stop();
                    }
                    invalidate();
                    repaint();
                }
            };

            timer = new Timer(100, action);
            timer.setRepeats(true);

            setOpaque(false);

            final JButton fade = new JButton("Fade");
            fade.addActionListener(new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent e) {
                    timer.start();
                    fade.setEnabled(false);
                }
            });

            setLayout(new GridBagLayout());
            add(fade);
        }

        @Override
        public void paint(Graphics g) {
            Graphics2D g2 = (Graphics2D) g.create();
            System.out.println(transparency);
            g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, transparency));
            g2.setColor(getBackground());
            g2.fillRect(0, 0, getWidth(), getHeight());
            super.paint(g2);
            g2.dispose();
        }
    }
}

      

+3


source







All Articles