package org.das2.components;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
import org.das2.util.monitor.NullProgressMonitor;
/**
* One-line Label component prints the update progress to a
* JLabel component. This is either created by the client and set with
* setLabelComponent, or this class will also create one with getLabelComponent.
*
* @author jbf
*/
public class DasProgressLabel extends NullProgressMonitor {
private int ndot= 2;
private String taskLabel= "";
private JLabel label=null;
Timer repaintTimer= new Timer( 333,new ActionListener() {
@Override
public void actionPerformed( ActionEvent e ) {
final String p;
if ( getTaskSize()==-1 ) {
p= "";
} else {
p= "" + getTaskProgress()+"/"+getTaskSize();
}
ndot++;
if ( ndot==4 ) ndot=1;
final JLabel llabel= label;
Runnable run= new Runnable() {
public void run() {
if ( llabel!=null ) {
if ( isFinished() ) {
llabel.setText( " " + taskLabel + "...finished" );
} else {
llabel.setText( " " + taskLabel + " " + p + "...".substring(0,ndot) + " ".substring(ndot,3)+"" );
}
}
}
};
SwingUtilities.invokeLater(run);
}
} );
/**
* create the DasProgessLabel with the given label for the task.
* @param taskLabel the label for the task.
*/
public DasProgressLabel( String taskLabel ) {
repaintTimer.setRepeats(true);
repaintTimer.start();
this.taskLabel= taskLabel;
}
/**
* get the assigned label component, or create one if one has not been assigned.
* @return the assigned label component
*/
public synchronized JLabel getLabelComponent() {
if ( label==null ) {
label= new JLabel();
}
return label;
}
/**
* set the label to use for the progress monitor.
* @param label the assigned label component
*/
public synchronized void setLabelComponent( JLabel label ) {
this.label= label;
}
@Override
public void finished() {
super.finished();
repaintTimer.setRepeats(false);
repaintTimer.stop();
SwingUtilities.invokeLater( new Runnable() {
@Override
public void run() {
JLabel llabel= label;
if ( llabel!=null ) {
llabel.setText( " " + taskLabel + "...finished" );
}
}
});
}
}