/*
 * BlinkingLabel.java  1.0
 * 
 * Copyright (c) 1999 Emmanuel PUYBARET - eTeks.
 * All Rights Reserved.
 *
 */

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

// Classe de label clignotant en utilisant 
// alternativement la couleur par defaut du label 
// et une autre couleur passee au constructeur 
public class BlinkingLabel extends JLabel
{  
  Color defaultColor;   // Couleur par defaut du label
  Color blinkingColor;  // Couleur de clignotement
  Timer timer;          // Timer declenchant des tics

  // Constructeur 
  public BlinkingLabel (String text, 
                        Color  blinkingColor) 
  {	
    super (text);    
    this.blinkingColor = blinkingColor;
    this.defaultColor  = getForeground ();

    // Creation et lancement du timer
    timer = createTimer ();
    timer.start ();
  }
  
  // Methode renvoyant un timer pret a demarrer
  private Timer createTimer ()
  {
    // Creation d'une instance de listener 
    // associee au timer
    ActionListener action = new ActionListener ()
      {
        // Methode appelee a chaque tic du timer
        public void actionPerformed (ActionEvent event)
        {
          // Inversion de la couleur
          if (getForeground ().equals (defaultColor))            
            setForeground (blinkingColor);
          else
            setForeground (defaultColor);
        }
      };
      
    // Creation d'un timer qui genere un tic
    // chaque 500 millieme de seconde
    return new Timer (500, action);
  }  
  
  // Methode main () d'exemple de mise en oeuvre.
  // Utilisation : java BlinkingLabel
  public static void main (String [] args)
  {
    // Creation de deux labels
    JLabel label1 = new BlinkingLabel ("Label 1", Color.blue);
    JLabel label2 = new BlinkingLabel ("Label 2", Color.red.darker ());
    
    // Ajout des labels a une fenetre d'exemple
    JFrame frame = new JFrame ("Exemple");
    frame.getContentPane ().setLayout (new GridLayout (2, 1, 5, 5));
    frame.getContentPane ().add (label1);
    frame.getContentPane ().add (label2);
    frame.pack ();
    frame.show ();
  }
}
