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) { } }