Java tutorial
/** * 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) { } } } }