2D Graphics GUI Java

/**
 *   Arsenal Real-Time Collaboration Server Project
 *   Copyright (C) 2003  Michael Burnside, Arsenal Project
 *
 *   This library is free software; you can redistribute it and/or
 *   modify it under the terms of the GNU Lesser General Public
 *   License as published by the Free Software Foundation; either
 *   version 2.1 of the License, or (at your option) any later version.
 *
 *   This library is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *   Lesser General Public License for more details.
 *
 *   You should have received a copy of the GNU Lesser General Public
 *   License along with this library; if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * ***************************************************************** 
 *    $Header: /cvs/coolcollaborator/prod/coolcollaborator/prod/util/src/com/arsenal/util/AnimatedButton.java,v 1.1.1.1 2006/01/12 04:54:02 mburnside Exp $ 
 *     
 *    File: $Workfile: AnimatedButton.java $ 
 *     
 *    Description: 
 *     
 *    
 *     
 *    @author      michael@michaelburnside.com (arsenal-1) 
 *    @author      Michael Burnside 
 *    @version     %I%, %G% 
 *    @since       1.0 
 *     
 */
import java.io.File;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class AnimatedButton extends JPanel {
        
        Font font = new Font("Arial", Font.PLAIN, 10);
        Color darkSlateGray = new Color(49,79,79);
        Color dimGray = new Color(105,105,105);
        Color slateGray = new Color(112,138,144);
        Color lightSlateGray = new Color(119,136,153);
        Color gray = new Color(190,190,190);
        Color lightGray = new Color(211,211,211);
        Color[] colors = { Color.black, darkSlateGray, dimGray, slateGray,
                lightSlateGray, gray, lightGray, Color.white };
        
  private JButton button = new JButton();
        private int fadeSpeed = 50;
        private boolean animate = false;
        private boolean allowAnimate = true; // we will animate
  private Color foreground = Color.black;
  public void setDefaultForeground(Color foreground) { this.foreground = foreground; }
  
  public AnimatedButton(String buttonText, boolean useBgImage, Color defaultForeground, boolean allowAnimate) { 
    this.setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
          button.setText(buttonText);
    this.foreground = defaultForeground;
          this.allowAnimate = allowAnimate;
          setOpaque(false);
          add(button);
          if(allowAnimate)
            runThread.start();
  }
        
        
        private Thread runThread = new Thread(
          new  Runnable() {    
            public void run() {
              while(true) {
               try { runThread.sleep(100); } catch(Exception e) { }       
               if(animate) {
                 for(int i = 0; i < colors.length; i++) {
                   button.setForeground(colors[i]);
                   try { runThread.sleep(fadeSpeed); } catch(Exception e) { }
                 }
                 try { runThread.sleep(100); } catch(Exception e) { }
                 for(int i = colors.length -1 ; i >= 0; i--) {
                   button.setForeground(colors[i]);      
                  try { runThread.sleep(fadeSpeed); } catch(Exception le) { }
                 }
               } // end if animate
              } //end while
            }
          }
        );
        /**
         *
         * Sets the button's and panel's minimum size
         *
         * @param width width, in pixels
         * @param height height, in pixels
         *
         */        
        public void setMaximumSize(int width, int height) {
           setMaximumSize(new Dimension(width, height));
           button.setMaximumSize(new Dimension(width, height));       
        }
        /**
         *
         * Sets the button's and panel's minimum size
         *
         * @param width width, in pixels
         * @param height height, in pixels
         *
         */
        public void setMinimumSize(int width, int height) {
           setMinimumSize(new Dimension(width, height));
           button.setMinimumSize(new Dimension(width, height));       
        }
        /**
         *
         * Sets the button's and panel's preferred size
         *
         * @param width width, in pixels
         * @param height height, in pixels
         *
         */        
        public void setPreferredSize(int width, int height) {
           setPreferredSize(new Dimension(width, height));     
           button.setPreferredSize(new Dimension(width, height));       
        }
        /**
         *
         * gets the button instance
         *
         * @return JButton component of this class
         *
         */        
        public JButton getButton() {
           return button;       
        }
        
        public void setText(String text) {
           button.setText(text);
        }
        
        public void setEnable(boolean animate) {
                if(allowAnimate) {
                  this.animate = animate;
                  if(!animate)
                    button.setForeground(Color.black);
                  button.setEnabled(animate);
                }
                else {
                  button.setEnabled(animate);
                }
        }
        
}