package tim.prune.gui;
import java.awt.FlowLayout;
import javax.swing.BorderFactory;
import javax.swing.JLabel;
import javax.swing.JPanel;
import tim.prune.DataSubscriber;
/**
* Class to act as a status bar for the application
*/
public class StatusBar extends JPanel implements Runnable, DataSubscriber
{
/** Label for displaying the text */
private JLabel _label = null;
/** timer for clearing the status */
private long _timer = 0L;
/** thread for clearing the status */
private Thread _thread = null;
/** Number of milliseconds until status text cleared */
private static final long DEFAULT_CLEAR_INTERVAL = 1000L * 4;
/**
* Constructor
*/
public StatusBar()
{
setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
setBorder(BorderFactory.createLoweredBevelBorder());
_label = new JLabel(" ");
_label.setFont(_label.getFont().deriveFont(8));
add(_label);
}
/**
* Run method, to check if text should be deleted
* @see java.lang.Runnable#run()
*/
public void run()
{
while (System.currentTimeMillis() < _timer) {
try {
Thread.sleep(500);
}
catch (InterruptedException ie) {} // ignore
}
_label.setText(" ");
}
/**
* Accept notification that an action has been completed
* @param inMessage message to display
*/
public void actionCompleted(String inMessage)
{
_label.setText(" " + inMessage);
_timer = System.currentTimeMillis() + DEFAULT_CLEAR_INTERVAL;
// If necessary, start a new checker thread
if (_thread == null || !_thread.isAlive()) {
_thread = new Thread(this);
_thread.start();
}
}
/**
* Ignore signals about updated data
* @param inUpdateType update type
*/
public void dataUpdated(byte inUpdateType)
{
}
}