ProgressMonitorpublic class ProgressMonitor extends Object implements AccessibleA 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. |
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.
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 void | close()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.AccessibleContext | getAccessibleContext()Gets the AccessibleContext for the
ProgressMonitor
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 int | getMaximum()Returns the maximum value -- the higher end of the progress value.
return max;
| public int | getMillisToDecideToPopup()Returns the amount of time this object waits before deciding whether
or not to popup a progress monitor.
return millisToDecideToPopup;
| public int | getMillisToPopup()Returns the amount of time it will take for the popup to appear.
return millisToPopup;
| public int | getMinimum()Returns the minimum value -- the lower end of the progress value.
return min;
| public java.lang.String | getNote()Specifies the additional note that is displayed along with the
progress message.
return note;
| public boolean | isCanceled()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 void | setMaximum(int m)Specifies the maximum value.
max = m;
| public void | setMillisToDecideToPopup(int millisToDecideToPopup)Specifies the amount of time to wait before deciding whether or
not to popup a progress monitor.
this.millisToDecideToPopup = millisToDecideToPopup;
| public void | setMillisToPopup(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.)
this.millisToPopup = millisToPopup;
| public void | setMinimum(int m)Specifies the minimum value.
min = m;
| public void | setNote(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.
this.note = note;
if (noteLabel != null) {
noteLabel.setText(note);
}
| public void | setProgress(int nv)Indicate the progress of the operation being monitored.
If the specified value is >= the maximum, the progress
monitor is closed.
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();
}
}
}
}
|
|