/*************************************************** * * cismet GmbH, Saarbruecken, Germany * * ... and it just works. * ****************************************************/ package Sirius.navigator.ui.widget; /******************************************************************************* Copyright (c) : EIG (Environmental Informatics Group) http://www.htw-saarland.de/eig Prof. Dr. Reiner Guettler Prof. Dr. Ralf Denzer HTWdS Hochschule fuer Technik und Wirtschaft des Saarlandes Goebenstr. 40 66117 Saarbruecken Germany Programmers : Pascal Project : WuNDA 2 Version : 1.0 Purpose : Created : 16.02.2000 History : 17.04.2003 *******************************************************************************/ import java.awt.event.*; import java.net.URL; import javax.swing.*; /** * DOCUMENT ME! * * @version $Revision$, $Date$ */ public class MutableImageLabel extends JLabel { //~ Instance fields -------------------------------------------------------- private ImageIcon imageOff; private ImageIcon imageOn; private Timer timer; private boolean off = true; private boolean on = false; private int blinkQueue = 0; //~ Constructors ----------------------------------------------------------- /** * Creates a new MutableImageLabel object. * * @param imageOff DOCUMENT ME! * @param imageOn DOCUMENT ME! */ public MutableImageLabel(final ImageIcon imageOff, final ImageIcon imageOn) { super(imageOff); this.imageOff = imageOff; this.imageOn = imageOn; this.initImageLabel(); } /** * Creates a new MutableImageLabel object. * * @param imageOff DOCUMENT ME! * @param imageOn DOCUMENT ME! */ public MutableImageLabel(final String imageOff, final String imageOn) { this.imageOff = new ImageIcon(imageOff); this.imageOn = new ImageIcon(imageOn); this.setIcon(this.imageOff); this.initImageLabel(); } /** * Creates a new MutableImageLabel object. * * @param imageOff DOCUMENT ME! * @param imageOn DOCUMENT ME! */ public MutableImageLabel(final URL imageOff, final URL imageOn) { this.imageOff = new ImageIcon(imageOff); this.imageOn = new ImageIcon(imageOn); this.setIcon(this.imageOff); this.initImageLabel(); } //~ Methods ---------------------------------------------------------------- /** * DOCUMENT ME! */ protected void initImageLabel() { off = true; on = false; timer = new Timer(250, new ActionListener() { @Override public void actionPerformed(final ActionEvent evt) { if (on) { MutableImageLabel.this.imageOff(); } else { MutableImageLabel.this.imageOn(); } } }); timer.setCoalesce(false); } /** * DOCUMENT ME! */ protected synchronized void imageOff() { this.setIcon(imageOff); off = true; on = false; } /** * DOCUMENT ME! */ protected synchronized void imageOn() { this.setIcon(imageOn); off = false; on = true; } /** * DOCUMENT ME! * * @param stopBlinking DOCUMENT ME! */ public void switchOff(final boolean stopBlinking) { if (stopBlinking) { blinkQueue--; } if (blinkQueue < 1) { blinkQueue = 0; timer.stop(); this.imageOff(); } } /** * DOCUMENT ME! * * @param stopBlinking DOCUMENT ME! */ public void switchOn(final boolean stopBlinking) { if (stopBlinking) { blinkQueue--; } if (blinkQueue < 1) { blinkQueue = 0; timer.stop(); this.imageOn(); } } /** * DOCUMENT ME! * * @param msec DOCUMENT ME! */ public void blink(final int msec) { timer.setDelay(msec); timer.start(); blinkQueue++; } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public boolean isBlinking() { if (blinkQueue > 0) { return true; } return false; } /** * DOCUMENT ME! * * @param imageOff DOCUMENT ME! * @param imageOn DOCUMENT ME! */ public void setImages(final ImageIcon imageOff, final ImageIcon imageOn) { blinkQueue = 0; this.imageOff = imageOff; this.imageOn = imageOn; this.switchOff(true); } /** * DOCUMENT ME! * * @return DOCUMENT ME! */ public ImageIcon[] getImages() { return new ImageIcon[] { imageOff, imageOn }; } }