package com.horstmann.violet.framework.swingextension; import java.awt.AlphaComposite; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.ImageIcon; import javax.swing.JLabel; import javax.swing.Timer; public class FadeImage extends JLabel implements ActionListener { // Up to 1f private float opacity = 0f; private Timer fadeTimer; private int fadeIndicator = 1; public FadeImage(ImageIcon anImage) { super(); setIcon(anImage); initializeTimer(); } private void initializeTimer() { fadeTimer = new javax.swing.Timer(25, this); fadeTimer.setInitialDelay(0); } public void fadeIn() { fadeIndicator = 1; fadeTimer.restart(); } public void fadeOut() { fadeIndicator = -1; fadeTimer.restart(); } public void actionPerformed(ActionEvent e) { opacity = opacity + (fadeIndicator * 0.1f); if (opacity > 1) { opacity = 1; fadeTimer.stop(); } if (opacity < 0) { opacity = 0; fadeTimer.stop(); } repaint(); } @Override public void paint(Graphics g) { ((Graphics2D) g).setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, opacity)); super.paint(g); } }