AnimatedPasswordField.java Source code

Java tutorial

Introduction

Here is the source code for AnimatedPasswordField.java

Source

/**
 *   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/AnimatedPasswordField.java,v 1.1.1.1 2006/01/12 04:54:02 mburnside Exp $ 
 *     
 *    File: $Workfile: AnimatedPasswordField.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 AnimatedPasswordField extends JPanel implements FocusListener {

    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 JPasswordField textField = new JPasswordField();
    private JLabel label = new JLabel();
    private int fadeSpeed = 50;
    private boolean animate = false;
    private boolean allowFade = false;
    private boolean fadeOut = false;
    private boolean fadeIn = false;
    private Color foreground = Color.black;

    public void setDefaultForeground(Color foreground) {
        this.foreground = foreground;
    }

    private boolean allowAnimate = true; // we will animate

    public AnimatedPasswordField(String labelText, boolean useBgImage, Color defaultForeground,
            boolean allowAnimate) {
        this.setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
        label.setText(labelText);
        textField.addFocusListener(this);
        label.setBackground(colors[0]);
        textField.setBackground(colors[0]);
        this.foreground = defaultForeground;
        this.allowAnimate = allowAnimate;
        label.setForeground(foreground);
        textField.setForeground(foreground);
        add(label);
        add(textField);
        if (allowAnimate)
            runThread.start();
        if (allowFade) {
            fadeInThread.start();
            fadeOutThread.start();
        }
        setOpaque(false);
    }

    public AnimatedPasswordField(String labelText, boolean useBgImage, Color defaultForeground,
            boolean allowAnimate, boolean allowFade) {
        this.setLayout(new BoxLayout(this, BoxLayout.LINE_AXIS));
        label.setText(labelText);
        textField.addFocusListener(this);
        label.setBackground(colors[0]);
        textField.setBackground(colors[0]);
        this.foreground = defaultForeground;
        this.allowAnimate = allowAnimate;
        this.allowFade = allowFade;
        label.setForeground(foreground);
        textField.setForeground(foreground);
        add(label);
        add(textField);
        if (allowAnimate)
            runThread.start();
        if (allowFade) {
            fadeInThread.start();
            fadeOutThread.start();
        }
        setOpaque(false);
    }

    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++) {
                        label.setForeground(colors[i]);
                        try {
                            runThread.sleep(20);
                        } catch (Exception e) {
                        }
                    }
                    try {
                        runThread.sleep(100);
                    } catch (Exception e) {
                    }
                    for (int i = colors.length - 1; i >= 0; i--) {
                        label.setForeground(colors[i]);
                        try {
                            runThread.sleep(20);
                        } catch (Exception le) {
                        }
                    }
                } // end if animate
                label.setForeground(foreground);
            } //end while
        }
    });

    private Thread fadeInThread = new Thread(new Runnable() {
        public void run() {
            while (true) {
                if (fadeIn) {
                    fadeIn();
                    fadeIn = false;
                }
                try {
                    fadeInThread.sleep(fadeSpeed);
                } catch (Exception le) {
                }
            }
        }
    });

    private Thread fadeOutThread = new Thread(new Runnable() {
        public void run() {
            while (true) {
                if (fadeOut) {
                    fadeOut();
                    fadeOut = false;
                }
                try {
                    fadeOutThread.sleep(fadeSpeed);
                } catch (Exception le) {
                }
            }
        }
    });

    public void focusGained(FocusEvent e) {
        //if(allowAnimate) fadeIn();
        animate = true;
        if (allowFade) {
            fadeIn = true;
            fadeOut = false;
        } else {
            textField.setBackground(Color.white);
            textField.setForeground(Color.black);
        }
    }

    public void focusLost(FocusEvent e) {
        //if(allowAnimate) fadeOut();
        animate = false;
        if (allowFade) {
            fadeOut = true;
            fadeIn = false;
            try {
                runThread.sleep(50);
            } catch (Exception le) {
            }
        } else {
            textField.setBackground(Color.black);
            textField.setForeground(Color.white);
        }
    }

    /**
     *
     * disable the components on this panel
     *
     */
    public void setInputsDisabled() {
        setInputsEnabled(false);
    }

    /**
     *
     * enable the components on this panel
     *
     */
    public void setInputsEnabled() {
        setInputsEnabled(true);
    }

    /**
     *
     * enable or disable the components on this panel
     *
     * @param enable or disable
     *
     */
    public void setInputsEnabled(boolean enable) {
        textField.setEnabled(enable);
        //label.setEnabled(enable);
        if (!enable)
            animate = false;
    }

    /**
     *
     * are the inputs enabled
     *
     * @returns boolean
     *
     */
    public boolean areInputsEnabled() {
        return textField.isEnabled();
    }

    /**
     *
     * Sets the label's maximum size
     *
     * @param width width, in pixels
     * @param height height, in pixels
     *
     */
    public void setLabelMaximumSize(int width, int height) {
        label.setMaximumSize(new Dimension(width, height));
    }

    /**
     *
     * Sets the label's minimum size
     *
     * @param width width, in pixels
     * @param height height, in pixels
     *
     */
    public void setLabelMinimumSize(int width, int height) {
        label.setMinimumSize(new Dimension(width, height));
    }

    /**
     *
     * Sets the label's preferred size
     *
     * @param width width, in pixels
     * @param height height, in pixels
     *
     */
    public void setLabelPreferredSize(int width, int height) {
        label.setPreferredSize(new Dimension(width, height));
    }

    /**
     *
     * Sets the text field's maximum size
     *
     * @param width width, in pixels
     * @param height height, in pixels
     *
     */
    public void setTextFieldMaximumSize(int width, int height) {
        textField.setMaximumSize(new Dimension(width, height));
    }

    /**
     *
     * Sets the text field's minimum size
     *
     * @param width width, in pixels
     * @param height height, in pixels
     *
     */
    public void setTextFieldMinimumSize(int width, int height) {
        textField.setMinimumSize(new Dimension(width, height));
    }

    /**
     *
     * Sets the text field's preferred size
     *
     * @param width width, in pixels
     * @param height height, in pixels
     *
     */
    public void setTextFieldPreferredSize(int width, int height) {
        textField.setPreferredSize(new Dimension(width, height));
    }

    /**
     *
     * Gets the text field's value
     *
     * @return the text field value after trim()
     *
     */
    public String getValue() {
        return textField.getText().trim();
    }

    /**
     *
     * gets the label instance
     *
     * @return jlabel component of this class
     *
     */
    public JLabel getLabel() {
        return label;
    }

    /**
     *
     * gets the text field instance
     *
     * @return textfield component of this class
     *
     */
    public JTextField getTextField() {
        return textField;
    }

    public void setText(String text) {
        textField.setText(text);
    }

    private void fadeIn() {
        textField.setForeground(Color.black);
        for (int i = 0; i < colors.length; i++) {
            textField.setBackground(colors[i]);
            try {
                Thread.sleep(fadeSpeed);
            } catch (Exception e) {
            }
        }
    }

    private void fadeOut() {
        textField.setForeground(Color.white);
        for (int i = colors.length - 1; i >= 0; i--) {
            textField.setBackground(colors[i]);
            try {
                Thread.sleep(fadeSpeed);
            } catch (Exception le) {
            }
        }
    }

}