FileDocCategorySizeDatePackage
ProgressMonitor.javaAPI DocJava SE 5 API32540Fri Aug 26 14:57:58 BST 2005javax.swing

ProgressMonitor

public class ProgressMonitor extends Object implements Accessible
A class to monitor the progress of some operation. If it looks like the operation will take a while, a progress dialog will be popped up. When the ProgressMonitor is created it is given a numeric range and a descriptive string. As the operation progresses, call the setProgress method to indicate how far along the [min,max] range the operation is. Initially, there is no ProgressDialog. After the first millisToDecideToPopup milliseconds (default 500) the progress monitor will predict how long the operation will take. If it is longer than millisToPopup (default 2000, 2 seconds) a ProgressDialog will be popped up.

From time to time, when the Dialog box is visible, the progress bar will be updated when setProgress is called. setProgress won't always update the progress bar, it will only be done if the amount of progress is visibly significant.

For further documentation and examples see How to Monitor Progress, a section in The Java Tutorial.

see
ProgressMonitorInputStream
author
James Gosling
author
Lynn Monsanto (accessibility)
version
1.30 04/15/04

Fields Summary
private ProgressMonitor
root
private JDialog
dialog
private JOptionPane
pane
private JProgressBar
myBar
private JLabel
noteLabel
private Component
parentComponent
private String
note
private Object[]
cancelOption
private Object
message
private long
T0
private int
millisToDecideToPopup
private int
millisToPopup
private int
min
private int
max
private int
v
private int
lastDisp
private int
reportDelta
protected AccessibleContext
accessibleContext
private AccessibleContext
accessibleJOptionPane
Constructors Summary
public ProgressMonitor(Component parentComponent, Object message, String note, int min, int max)
Constructs a graphic object that shows progress, typically by filling in a rectangular bar as the process nears completion.

param
parentComponent the parent component for the dialog box
param
message a descriptive message that will be shown to the user to indicate what operation is being monitored. This does not change as the operation progresses. See the message parameters to methods in {@link JOptionPane#message} for the range of values.
param
note a short note describing the state of the operation. As the operation progresses, you can call setNote to change the note displayed. This is used, for example, in operations that iterate through a list of files to show the name of the file being processes. If note is initially null, there will be no note line in the dialog box and setNote will be ineffective
param
min the lower bound of the range
param
max the upper bound of the range
see
JDialog
see
JOptionPane



                                                                                                                                                                                                                                                    
      
                            
                            
                            
                             
        this(parentComponent, message, note, min, max, null);
    
private ProgressMonitor(Component parentComponent, Object message, String note, int min, int max, ProgressMonitor group)

        this.min = min;
        this.max = max;
        this.parentComponent = parentComponent;

        cancelOption = new Object[1];
        cancelOption[0] = UIManager.getString("OptionPane.cancelButtonText");

        reportDelta = (max - min) / 100;
        if (reportDelta < 1) reportDelta = 1;
        v = min;
        this.message = message;
        this.note = note;
        if (group != null) {
            root = (group.root != null) ? group.root : group;
            T0 = root.T0;
            dialog = root.dialog;
        }
        else {
            T0 = System.currentTimeMillis();
        }
    
Methods Summary
public voidclose()
Indicate that the operation is complete. This happens automatically when the value set by setProgress is >= max, but it may be called earlier if the operation ends early.

        if (dialog != null) {
            dialog.setVisible(false);
            dialog.dispose();
            dialog = null;
            pane = null;
            myBar = null;
        }
    
public javax.accessibility.AccessibleContextgetAccessibleContext()
Gets the AccessibleContext for the ProgressMonitor

return
the AccessibleContext for the ProgressMonitor
since
1.5


                         
       
	if (accessibleContext == null) {
	    accessibleContext = new AccessibleProgressMonitor();
	}
	if (pane != null && accessibleJOptionPane == null) {
	    // Notify the AccessibleProgressMonitor that the
	    // ProgressOptionPane was created. It is necessary
	    // to poll for ProgressOptionPane creation because
	    // the ProgressMonitor does not have a Component 
	    // to add a listener to until the ProgressOptionPane
	    // is created.
	    if (accessibleContext instanceof AccessibleProgressMonitor) {
		((AccessibleProgressMonitor)accessibleContext).optionPaneCreated();
	    }
	}
	return accessibleContext;
    
public intgetMaximum()
Returns the maximum value -- the higher end of the progress value.

return
an int representing the maximum value
see
#setMaximum

        return max;
    
public intgetMillisToDecideToPopup()
Returns the amount of time this object waits before deciding whether or not to popup a progress monitor.

see
#setMillisToDecideToPopup

        return millisToDecideToPopup;
    
public intgetMillisToPopup()
Returns the amount of time it will take for the popup to appear.

see
#setMillisToPopup

        return millisToPopup;
    
public intgetMinimum()
Returns the minimum value -- the lower end of the progress value.

return
an int representing the minimum value
see
#setMinimum

        return min;
    
public java.lang.StringgetNote()
Specifies the additional note that is displayed along with the progress message.

return
a String specifying the note to display
see
#setNote

        return note;
    
public booleanisCanceled()
Returns true if the user hits the Cancel button in the progress dialog.

        if (pane == null) return false;
        Object v = pane.getValue();
        return ((v != null) &&
                (cancelOption.length == 1) &&
                (v.equals(cancelOption[0])));
    
public voidsetMaximum(int m)
Specifies the maximum value.

param
m an int specifying the maximum value
see
#getMaximum

        max = m;
    
public voidsetMillisToDecideToPopup(int millisToDecideToPopup)
Specifies the amount of time to wait before deciding whether or not to popup a progress monitor.

param
millisToDecideToPopup an int specifying the time to wait, in milliseconds
see
#getMillisToDecideToPopup

        this.millisToDecideToPopup = millisToDecideToPopup;
    
public voidsetMillisToPopup(int millisToPopup)
Specifies the amount of time it will take for the popup to appear. (If the predicted time remaining is less than this time, the popup won't be displayed.)

param
millisToPopup an int specifying the time in milliseconds
see
#getMillisToPopup

        this.millisToPopup = millisToPopup;
    
public voidsetMinimum(int m)
Specifies the minimum value.

param
m an int specifying the minimum value
see
#getMinimum

        min = m;
    
public voidsetNote(java.lang.String note)
Specifies the additional note that is displayed along with the progress message. Used, for example, to show which file the is currently being copied during a multiple-file copy.

param
note a String specifying the note to display
see
#getNote

        this.note = note;
        if (noteLabel != null) {
            noteLabel.setText(note);
        }
    
public voidsetProgress(int nv)
Indicate the progress of the operation being monitored. If the specified value is >= the maximum, the progress monitor is closed.

param
nv an int specifying the current value, between the maximum and minimum specified for this component
see
#setMinimum
see
#setMaximum
see
#close

        v = nv;
        if (nv >= max) {
            close();
        }
        else if (nv >= lastDisp + reportDelta) {
            lastDisp = nv;
            if (myBar != null) {
                myBar.setValue(nv);
            }
            else {
                long T = System.currentTimeMillis();
                long dT = (int)(T-T0);
                if (dT >= millisToDecideToPopup) {
                    int predictedCompletionTime;
                    if (nv > min) {
                        predictedCompletionTime = (int)((long)dT *
                                                        (max - min) /
                                                        (nv - min));
                    }
                    else {
                        predictedCompletionTime = millisToPopup;
                    }
                    if (predictedCompletionTime >= millisToPopup) {
                        myBar = new JProgressBar();
                        myBar.setMinimum(min);
                        myBar.setMaximum(max);
                        myBar.setValue(nv);
                        if (note != null) noteLabel = new JLabel(note);
                        pane = new ProgressOptionPane(new Object[] {message,
                                                                    noteLabel,
                                                                    myBar});
                        dialog = pane.createDialog(parentComponent,
                            UIManager.getString(
                                "ProgressMonitor.progressText"));
                        dialog.show();
                    }
                }
            }
        }