- /*
- * @(#)JProgressBar.java 1.93 03/12/19
- *
- * Copyright 2004 Sun Microsystems, Inc. All rights reserved.
- * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
- */
-
- package javax.swing;
-
- import java.awt.Color;
- import java.awt.Graphics;
-
- import java.text.Format;
- import java.text.NumberFormat;
-
- import java.io.Serializable;
- import java.io.ObjectOutputStream;
- import java.io.ObjectInputStream;
- import java.io.IOException;
-
- import javax.swing.event.*;
- import javax.accessibility.*;
- import javax.swing.plaf.ProgressBarUI;
-
-
- /**
- * A component that, by default, displays an integer value within a bounded
- * interval. A progress bar typically communicates the progress of some
- * work by displaying its percentage of completion and possibly a textual
- * display of this percentage.
- *
- * <p>
- *
- * To indicate that a task of unknown length is executing,
- * you can put a progress bar into indeterminate mode.
- * While the bar is in indeterminate mode,
- * it animates constantly to show that work is occurring.
- * As soon as you can determine the task's length and amount of progress,
- * you should update the progress bar's value
- * and switch it back to determinate mode.
- *
- * <p>
- *
- * Here is an example of creating a progress bar,
- * where <code>task</code> is an object
- * that returns information about the progress of some work:
- *
- *<pre>
- *progressBar = new JProgressBar(0, task.getLengthOfTask());
- *progressBar.setValue(0);
- *progressBar.setStringPainted(true);
- *</pre>
- *
- * Here is an example of updating the value of the progress bar:
- *
- *<pre>
- *progressBar.setValue(task.getCurrent());
- *</pre>
- *
- * Here is an example of putting a progress bar into
- * indeterminate mode,
- * and then switching back to determinate mode
- * once the length of the task is known:
- *
- *<pre>
- *progressBar = new JProgressBar();
- *<em>...//when the task of (initially) unknown length begins:</em>
- *progressBar.setIndeterminate(true);
- *<em>...//do some work; get length of task...</em>
- *progressBar.setMaximum(newLength);
- *progressBar.setValue(newValue);
- *progressBar.setIndeterminate(false);
- *</pre>
- *
- * <p>
- *
- * For complete examples and further documentation see
- * <a href="http://java.sun.com/docs/books/tutorial/uiswing/components/progress.html" target="_top">How to Monitor Progress</a>,
- * a section in <em>The Java Tutorial.</em>
- *
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases. The current serialization support is
- * appropriate for short term storage or RMI between applications running
- * the same version of Swing. As of 1.4, support for long term storage
- * of all JavaBeans<sup><font size="-2">TM</font></sup>
- * has been added to the <code>java.beans</code> package.
- * Please see {@link java.beans.XMLEncoder}.
- *
- * @see javax.swing.plaf.basic.BasicProgressBarUI
- *
- * @beaninfo
- * attribute: isContainer false
- * description: A component that displays an integer value.
- *
- * @version 1.93 12/19/03
- * @author Michael C. Albers
- * @author Kathy Walrath
- */
- public class JProgressBar extends JComponent implements SwingConstants, Accessible
- {
- /**
- * @see #getUIClassID
- */
- private static final String uiClassID = "ProgressBarUI";
-
- /**
- * Whether the progress bar is horizontal or vertical.
- * The default is <code>HORIZONTAL</code>.
- *
- * @see #setOrientation
- */
- protected int orientation;
-
- /**
- * Whether to display a border around the progress bar.
- * The default is <code>true</code>.
- *
- * @see #setBorderPainted
- */
- protected boolean paintBorder;
-
- /**
- * The object that holds the data for the progress bar.
- *
- * @see #setModel
- */
- protected BoundedRangeModel model;
-
- /**
- * An optional string that can be displayed on the progress bar.
- * The default is <code>null</code>. Setting this to a non-<code>null</code>
- * value does not imply that the string will be displayed.
- *
- * @see #setString
- */
- protected String progressString;
-
- /**
- * Whether to textually display a string on the progress bar.
- * The default is <code>false</code>.
- * Setting this to <code>true</code> causes a textual
- * display of the progress to be rendered on the progress bar. If
- * the <code>progressString</code> is <code>null</code>,
- * the percentage of completion is displayed on the progress bar.
- * Otherwise, the <code>progressString</code> is
- * rendered on the progress bar.
- *
- * @see #setStringPainted
- */
- protected boolean paintString;
-
- /**
- * The default minimum for a progress bar is 0.
- */
- static final private int defaultMinimum = 0;
- /**
- * The default maximum for a progress bar is 100.
- */
- static final private int defaultMaximum = 100;
- /**
- * The default orientation for a progress bar is <code>HORIZONTAL</code>.
- */
- static final private int defaultOrientation = HORIZONTAL;
-
- /**
- * Only one <code>ChangeEvent</code> is needed per instance since the
- * event's only interesting property is the immutable source, which
- * is the progress bar.
- */
- protected transient ChangeEvent changeEvent = null;
-
- /**
- * Listens for change events sent by the progress bar's model,
- * redispatching them
- * to change-event listeners registered upon
- * this progress bar.
- *
- * @see #createChangeListener
- */
- protected ChangeListener changeListener = null;
-
- /**
- * Format used when displaying percent complete.
- */
- private transient Format format;
-
- /**
- * Whether the progress bar is indeterminate (<code>true</code>) or
- * normal (<code>false</code>); the default is <code>false</code>.
- *
- * @see #setIndeterminate
- * @since 1.4
- */
- private boolean indeterminate;
-
-
- /**
- * Creates a horizontal progress bar
- * that displays a border but no progress string.
- * The initial and minimum values are 0,
- * and the maximum is 100.
- *
- * @see #setOrientation
- * @see #setBorderPainted
- * @see #setStringPainted
- * @see #setString
- * @see #setIndeterminate
- */
- public JProgressBar()
- {
- this(defaultOrientation);
- }
-
- /**
- * Creates a progress bar with the specified orientation,
- * which can be
- * either <code>JProgressBar.VERTICAL</code> or
- * <code>JProgressBar.HORIZONTAL</code>.
- * By default, a border is painted but a progress string is not.
- * The initial and minimum values are 0,
- * and the maximum is 100.
- *
- * @param orient the desired orientation of the progress bar
- *
- * @see #setOrientation
- * @see #setBorderPainted
- * @see #setStringPainted
- * @see #setString
- * @see #setIndeterminate
- */
- public JProgressBar(int orient)
- {
- this(orient, defaultMinimum, defaultMaximum);
- }
-
-
- /**
- * Creates a horizontal progress bar
- * with the specified minimum and maximum.
- * Sets the initial value of the progress bar to the specified minimum.
- * By default, a border is painted but a progress string is not.
- * The <code>BoundedRangeModel</code> that holds the progress bar's data
- * handles any issues that may arise from improperly setting the
- * minimum, initial, and maximum values on the progress bar.
- *
- * @param min the minimum value of the progress bar
- * @param max the maximum value of the progress bar
- *
- * @see BoundedRangeModel
- * @see #setOrientation
- * @see #setBorderPainted
- * @see #setStringPainted
- * @see #setString
- * @see #setIndeterminate
- */
- public JProgressBar(int min, int max)
- {
- this(defaultOrientation, min, max);
- }
-
-
- /**
- * Creates a progress bar using the specified orientation,
- * minimum, and maximum.
- * By default, a border is painted but a progress string is not.
- * Sets the initial value of the progress bar to the specified minimum.
- * The <code>BoundedRangeModel</code> that holds the progress bar's data
- * handles any issues that may arise from improperly setting the
- * minimum, initial, and maximum values on the progress bar.
- *
- * @param orient the desired orientation of the progress bar
- * @param min the minimum value of the progress bar
- * @param max the maximum value of the progress bar
- *
- * @see BoundedRangeModel
- * @see #setOrientation
- * @see #setBorderPainted
- * @see #setStringPainted
- * @see #setString
- * @see #setIndeterminate
- */
- public JProgressBar(int orient, int min, int max)
- {
- // Creating the model this way is a bit simplistic, but
- // I believe that it is the the most common usage of this
- // component - it's what people will expect.
- setModel(new DefaultBoundedRangeModel(min, 0, min, max));
- updateUI();
-
- setOrientation(orient); // documented with set/getOrientation()
- setBorderPainted(true); // documented with is/setBorderPainted()
- setStringPainted(false); // see setStringPainted
- setString(null); // see getString
- setIndeterminate(false); // see setIndeterminate
- }
-
-
- /**
- * Creates a horizontal progress bar
- * that uses the specified model
- * to hold the progress bar's data.
- * By default, a border is painted but a progress string is not.
- *
- * @param newModel the data model for the progress bar
- *
- * @see #setOrientation
- * @see #setBorderPainted
- * @see #setStringPainted
- * @see #setString
- * @see #setIndeterminate
- */
- public JProgressBar(BoundedRangeModel newModel)
- {
- setModel(newModel);
- updateUI();
-
- setOrientation(defaultOrientation); // see setOrientation()
- setBorderPainted(true); // see setBorderPainted()
- setStringPainted(false); // see setStringPainted
- setString(null); // see getString
- setIndeterminate(false); // see setIndeterminate
- }
-
-
- /**
- * Returns <code>JProgressBar.VERTICAL</code> or
- * <code>JProgressBar.HORIZONTAL</code>, depending on the orientation
- * of the progress bar. The default orientation is
- * <code>HORIZONTAL</code>.
- *
- * @return <code>HORIZONTAL</code> or <code>VERTICAL</code>
- * @see #setOrientation
- */
- public int getOrientation() {
- return orientation;
- }
-
-
- /**
- * Sets the progress bar's orientation to <code>newOrientation</code>,
- * which must be <code>JProgressBar.VERTICAL</code> or
- * <code>JProgressBar.HORIZONTAL</code>. The default orientation
- * is <code>HORIZONTAL</code>.
- *
- * @param newOrientation <code>HORIZONTAL</code> or <code>VERTICAL</code>
- * @exception IllegalArgumentException if <code>newOrientation</code>
- * is an illegal value
- * @see #getOrientation
- *
- * @beaninfo
- * preferred: true
- * bound: true
- * attribute: visualUpdate true
- * description: Set the progress bar's orientation.
- */
- public void setOrientation(int newOrientation) {
- if (orientation != newOrientation) {
- switch (newOrientation) {
- case VERTICAL:
- case HORIZONTAL:
- int oldOrientation = orientation;
- orientation = newOrientation;
- firePropertyChange("orientation", oldOrientation, newOrientation);
- if (accessibleContext != null) {
- accessibleContext.firePropertyChange(
- AccessibleContext.ACCESSIBLE_STATE_PROPERTY,
- ((oldOrientation == VERTICAL)
- ? AccessibleState.VERTICAL
- : AccessibleState.HORIZONTAL),
- ((orientation == VERTICAL)
- ? AccessibleState.VERTICAL
- : AccessibleState.HORIZONTAL));
- }
- break;
- default:
- throw new IllegalArgumentException(newOrientation +
- " is not a legal orientation");
- }
- revalidate();
- }
- }
-
-
- /**
- * Returns the value of the <code>stringPainted</code> property.
- *
- * @return the value of the <code>stringPainted</code> property
- * @see #setStringPainted
- * @see #setString
- */
- public boolean isStringPainted() {
- return paintString;
- }
-
-
- /**
- * Sets the value of the <code>stringPainted</code> property,
- * which determines whether the progress bar
- * should render a progress string.
- * The default is <code>false</code>:
- * no string is painted.
- * Some look and feels might not support progress strings
- * or might support them only when the progress bar is in determinate mode.
- *
- * @param b <code>true</code> if the progress bar should render a string
- * @see #isStringPainted
- * @see #setString
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Whether the progress bar should render a string.
- */
- public void setStringPainted(boolean b) {
- //PENDING: specify that string not painted when in indeterminate mode?
- // or just leave that to the L&F?
- boolean oldValue = paintString;
- paintString = b;
- firePropertyChange("stringPainted", oldValue, paintString);
- if (paintString != oldValue) {
- revalidate();
- repaint();
- }
- }
-
-
- /**
- * Returns the current value of the progress string.
- * If you are providing a custom progress string
- * by overriding this method,
- * make sure your implementation calls <code>setString</code> before
- * calling <code>super.getString</code>.
- *
- * @return the value of the percent string
- * @see #setString
- */
- public String getString(){
- if (progressString != null) {
- return progressString;
- } else {
- if (format == null) {
- format = NumberFormat.getPercentInstance();
- }
- return format.format(new Double(getPercentComplete()));
- }
- }
-
- /**
- * Sets the value of the progress string. By default,
- * this string is <code>null</code>.
- * If you have provided a custom progress string and want to revert to
- * the built-in behavior, set the string back to <code>null</code>.
- * If you are providing a custom progress string
- * by overriding this method,
- * make sure that you call <code>setString</code> before
- * calling <code>getString</code>.
- * The progress string is painted only if
- * the <code>isStringPainted</code> method returns <code>true</code>.
- *
- * @param s the value of the percent string
- * @see #getString
- * @see #setStringPainted
- * @see #isStringPainted
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Specifies the progress string to paint
- */
- public void setString(String s){
- String oldValue = progressString;
- progressString = s;
- firePropertyChange("string", oldValue, progressString);
- if (progressString == null || oldValue == null || !progressString.equals(oldValue)) {
- repaint();
- }
- }
-
- /**
- * Returns the percent complete for the progress bar.
- * Note that this number is between 0.0 and 1.0.
- *
- * @return the percent complete for this progress bar
- */
- public double getPercentComplete() {
- long span = model.getMaximum() - model.getMinimum();
- double currentValue = model.getValue();
- double pc = (currentValue - model.getMinimum()) / span;
- return pc;
- }
-
- /**
- * Returns the <code>borderPainted</code> property.
- *
- * @return the value of the <code>borderPainted</code> property
- * @see #setBorderPainted
- * @beaninfo
- * description: Does the progress bar paint its border
- */
- public boolean isBorderPainted() {
- return paintBorder;
- }
-
- /**
- * Sets the <code>borderPainted</code> property, which is
- * <code>true</code> if the progress bar should paint its border.
- * The default value for this property is <code>true</code>.
- * Some look and feels might not implement painted borders;
- * they will ignore this property.
- *
- * @param b <code>true</code> if the progress bar
- * should paint its border;
- * otherwise, <code>false</code>
- * @see #isBorderPainted
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Whether the progress bar should paint its border.
- */
- public void setBorderPainted(boolean b) {
- boolean oldValue = paintBorder;
- paintBorder = b;
- firePropertyChange("borderPainted", oldValue, paintBorder);
- if (paintBorder != oldValue) {
- repaint();
- }
- }
-
- /**
- * Paints the progress bar's border if the <code>borderPainted</code>
- * property is <code>true</code>.
- *
- * @param g the <code>Graphics</code> context within which to paint the border
- * @see #paint
- * @see #setBorder
- * @see #isBorderPainted
- * @see #setBorderPainted
- */
- protected void paintBorder(Graphics g) {
- if (isBorderPainted()) {
- super.paintBorder(g);
- }
- }
-
-
- /**
- * Returns the look-and-feel object that renders this component.
- *
- * @return the <code>ProgressBarUI</code> object that renders this component
- */
- public ProgressBarUI getUI() {
- return (ProgressBarUI)ui;
- }
-
- /**
- * Sets the look-and-feel object that renders this component.
- *
- * @param ui a <code>ProgressBarUI</code> object
- * @see UIDefaults#getUI
- * @beaninfo
- * bound: true
- * hidden: true
- * attribute: visualUpdate true
- * description: The UI object that implements the Component's LookAndFeel.
- */
- public void setUI(ProgressBarUI ui) {
- super.setUI(ui);
- }
-
-
- /**
- * Resets the UI property to a value from the current look and feel.
- *
- * @see JComponent#updateUI
- */
- public void updateUI() {
- setUI((ProgressBarUI)UIManager.getUI(this));
- }
-
-
- /**
- * Returns the name of the look-and-feel class that renders this component.
- *
- * @return the string "ProgressBarUI"
- * @see JComponent#getUIClassID
- * @see UIDefaults#getUI
- * @beaninfo
- * expert: true
- * description: A string that specifies the name of the look-and-feel class.
- */
- public String getUIClassID() {
- return uiClassID;
- }
-
-
- /* We pass each Change event to the listeners with the
- * the progress bar as the event source.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases. The current serialization support is
- * appropriate for short term storage or RMI between applications running
- * the same version of Swing. As of 1.4, support for long term storage
- * of all JavaBeans<sup><font size="-2">TM</font></sup>
- * has been added to the <code>java.beans</code> package.
- * Please see {@link java.beans.XMLEncoder}.
- */
- private class ModelListener implements ChangeListener, Serializable {
- public void stateChanged(ChangeEvent e) {
- fireStateChanged();
- }
- }
-
- /**
- * Subclasses that want to handle change events
- * from the model differently
- * can override this to return
- * an instance of a custom <code>ChangeListener</code> implementation.
- *
- * @see #changeListener
- * @see javax.swing.event.ChangeListener
- * @see javax.swing.BoundedRangeModel
- */
- protected ChangeListener createChangeListener() {
- return new ModelListener();
- }
-
- /**
- * Adds the specified <code>ChangeListener</code> to the progress bar.
- *
- * @param l the <code>ChangeListener</code> to add
- */
- public void addChangeListener(ChangeListener l) {
- listenerList.add(ChangeListener.class, l);
- }
-
- /**
- * Removes a <code>ChangeListener</code> from the progress bar.
- *
- * @param l the <code>ChangeListener</code> to remove
- */
- public void removeChangeListener(ChangeListener l) {
- listenerList.remove(ChangeListener.class, l);
- }
-
- /**
- * Returns an array of all the <code>ChangeListener</code>s added
- * to this progress bar with <code>addChangeListener</code>.
- *
- * @return all of the <code>ChangeListener</code>s added or an empty
- * array if no listeners have been added
- * @since 1.4
- */
- public ChangeListener[] getChangeListeners() {
- return (ChangeListener[])listenerList.getListeners(
- ChangeListener.class);
- }
-
- /**
- * Notifies all listeners that have registered interest in
- * <code>ChangeEvent</code>s.
- * The event instance
- * is created if necessary.
- *
- * @see EventListenerList
- */
- protected void fireStateChanged() {
- // Guaranteed to return a non-null array
- Object[] listeners = listenerList.getListenerList();
- // Process the listeners last to first, notifying
- // those that are interested in this event
- for (int i = listeners.length-2; i>=0; i-=2) {
- if (listeners[i]==ChangeListener.class) {
- // Lazily create the event:
- if (changeEvent == null)
- changeEvent = new ChangeEvent(this);
- ((ChangeListener)listeners[i+1]).stateChanged(changeEvent);
- }
- }
- }
-
- /**
- * Returns the data model used by this progress bar.
- *
- * @return the <code>BoundedRangeModel</code> currently in use
- * @see BoundedRangeModel
- */
- public BoundedRangeModel getModel() {
- return model;
- }
-
- /**
- * Sets the data model used by the <code>JProgressBar</code>.
- *
- * @param newModel the <code>BoundedRangeModel</code> to use
- *
- * @beaninfo
- * expert: true
- * description: The data model used by the JProgressBar.
- */
- public void setModel(BoundedRangeModel newModel) {
- // PENDING(???) setting the same model to multiple bars is broken; listeners
- BoundedRangeModel oldModel = getModel();
-
- if (newModel != oldModel) {
- if (oldModel != null) {
- oldModel.removeChangeListener(changeListener);
- changeListener = null;
- }
-
- model = newModel;
-
- if (newModel != null) {
- changeListener = createChangeListener();
- newModel.addChangeListener(changeListener);
- }
-
- if (accessibleContext != null) {
- accessibleContext.firePropertyChange(
- AccessibleContext.ACCESSIBLE_VALUE_PROPERTY,
- (oldModel== null
- ? null : new Integer(oldModel.getValue())),
- (newModel== null
- ? null : new Integer(newModel.getValue())));
- }
-
- if (model != null) {
- model.setExtent(0);
- }
- repaint();
- }
- }
-
-
- /* All of the model methods are implemented by delegation. */
-
- /**
- * Returns the progress bar's current value,
- * which is stored in the progress bar's <code>BoundedRangeModel</code>.
- * The value is always between the
- * minimum and maximum values, inclusive. By default, the
- * value is initialized to be equal to the minimum value.
- *
- * @return the current value of the progress bar
- * @see #setValue
- * @see BoundedRangeModel#getValue
- */
- public int getValue() { return getModel().getValue(); }
-
- /**
- * Returns the progress bar's minimum value,
- * which is stored in the progress bar's <code>BoundedRangeModel</code>.
- * By default, the minimum value is <code>0</code>.
- *
- * @return the progress bar's minimum value
- * @see #setMinimum
- * @see BoundedRangeModel#getMinimum
- */
- public int getMinimum() { return getModel().getMinimum(); }
-
- /**
- * Returns the progress bar's maximum value,
- * which is stored in the progress bar's <code>BoundedRangeModel</code>.
- * By default, the maximum value is <code>100</code>.
- *
- * @return the progress bar's maximum value
- * @see #setMaximum
- * @see BoundedRangeModel#getMaximum
- */
- public int getMaximum() { return getModel().getMaximum(); }
-
- /**
- * Sets the progress bar's current value
- * (stored in the progress bar's data model) to <code>n</code>.
- * The data model (a <code>BoundedRangeModel</code> instance)
- * handles any mathematical
- * issues arising from assigning faulty values.
- * <p>
- * If the new value is different from the previous value,
- * all change listeners are notified.
- *
- * @param n the new value
- * @see #getValue
- * @see BoundedRangeModel#setValue
- * @beaninfo
- * preferred: true
- * description: The progress bar's current value.
- */
- public void setValue(int n) {
- BoundedRangeModel brm = getModel();
- int oldValue = brm.getValue();
- brm.setValue(n);
-
- if (accessibleContext != null) {
- accessibleContext.firePropertyChange(
- AccessibleContext.ACCESSIBLE_VALUE_PROPERTY,
- new Integer(oldValue),
- new Integer(brm.getValue()));
- }
- }
-
- /**
- * Sets the progress bar's minimum value
- * (stored in the progress bar's data model) to <code>n</code>.
- * The data model (a <code>BoundedRangeModel</code> instance)
- * handles any mathematical
- * issues arising from assigning faulty values.
- * <p>
- * If the minimum value is different from the previous minimum,
- * all change listeners are notified.
- *
- * @param n the new minimum
- * @see #getMinimum
- * @see #addChangeListener
- * @see BoundedRangeModel#setMinimum
- * @beaninfo
- * preferred: true
- * description: The progress bar's minimum value.
- */
- public void setMinimum(int n) { getModel().setMinimum(n); }
-
- /**
- * Sets the progress bar's maximum value
- * (stored in the progress bar's data model) to <code>n</code>.
- * The underlying <code>BoundedRangeModel</code> handles any mathematical
- * issues arising from assigning faulty values.
- * <p>
- * If the maximum value is different from the previous maximum,
- * all change listeners are notified.
- *
- * @param n the new maximum
- * @see #getMaximum
- * @see #addChangeListener
- * @see BoundedRangeModel#setMaximum
- * @beaninfo
- * preferred: true
- * description: The progress bar's maximum value.
- */
- public void setMaximum(int n) { getModel().setMaximum(n); }
-
- /**
- * Sets the <code>indeterminate</code> property of the progress bar,
- * which determines whether the progress bar is in determinate
- * or indeterminate mode.
- * An indeterminate progress bar continuously displays animation
- * indicating that an operation of unknown length is occurring.
- * By default, this property is <code>false</code>.
- * Some look and feels might not support indeterminate progress bars;
- * they will ignore this property.
- *
- * <p>
- *
- * See
- * <a href="http://java.sun.com/docs/books/tutorial/uiswing/components/progress.html" target="_top">How to Monitor Progress</a>
- * for examples of using indeterminate progress bars.
- *
- * @param newValue <code>true</code> if the progress bar
- * should change to indeterminate mode;
- * <code>false</code> if it should revert to normal.
- *
- * @see #isIndeterminate
- * @see javax.swing.plaf.basic.BasicProgressBarUI
- *
- * @since 1.4
- *
- * @beaninfo
- * bound: true
- * attribute: visualUpdate true
- * description: Set whether the progress bar is indeterminate (true)
- * or normal (false).
- */
- public void setIndeterminate(boolean newValue) {
- boolean oldValue = indeterminate;
- indeterminate = newValue;
- firePropertyChange("indeterminate", oldValue, indeterminate);
- }
-
- /**
- * Returns the value of the <code>indeterminate</code> property.
- *
- * @return the value of the <code>indeterminate</code> property
- * @see #setIndeterminate
- *
- * @since 1.4
- *
- * @beaninfo
- * description: Is the progress bar indeterminate (true)
- * or normal (false)?
- */
- public boolean isIndeterminate() {
- return indeterminate;
- }
-
-
- /**
- * See readObject() and writeObject() in JComponent for more
- * information about serialization in Swing.
- */
- private void writeObject(ObjectOutputStream s) throws IOException {
- s.defaultWriteObject();
- if (getUIClassID().equals(uiClassID)) {
- byte count = JComponent.getWriteObjCounter(this);
- JComponent.setWriteObjCounter(this, --count);
- if (count == 0 && ui != null) {
- ui.installUI(this);
- }
- }
- }
-
-
- /**
- * Returns a string representation of this <code>JProgressBar</code>.
- * This method is intended to be used only for debugging purposes. The
- * content and format of the returned string may vary between
- * implementations. The returned string may be empty but may not
- * be <code>null</code>.
- *
- * @return a string representation of this <code>JProgressBar</code>
- */
- protected String paramString() {
- String orientationString = (orientation == HORIZONTAL ?
- "HORIZONTAL" : "VERTICAL");
- String paintBorderString = (paintBorder ?
- "true" : "false");
- String progressStringString = (progressString != null ?
- progressString : "");
- String paintStringString = (paintString ?
- "true" : "false");
- String indeterminateString = (indeterminate ?
- "true" : "false");
-
- return super.paramString() +
- ",orientation=" + orientationString +
- ",paintBorder=" + paintBorderString +
- ",paintString=" + paintStringString +
- ",progressString=" + progressStringString +
- ",indeterminateString=" + indeterminateString;
- }
-
- /////////////////
- // Accessibility support
- ////////////////
-
- /**
- * Gets the <code>AccessibleContext</code> associated with this
- * <code>JProgressBar</code>. For progress bars, the
- * <code>AccessibleContext</code> takes the form of an
- * <code>AccessibleJProgressBar</code>.
- * A new <code>AccessibleJProgressBar</code> instance is created if necessary.
- *
- * @return an <code>AccessibleJProgressBar</code> that serves as the
- * <code>AccessibleContext</code> of this <code>JProgressBar</code>
- * @beaninfo
- * expert: true
- * description: The AccessibleContext associated with this ProgressBar.
- */
- public AccessibleContext getAccessibleContext() {
- if (accessibleContext == null) {
- accessibleContext = new AccessibleJProgressBar();
- }
- return accessibleContext;
- }
-
- /**
- * This class implements accessibility support for the
- * <code>JProgressBar</code> class. It provides an implementation of the
- * Java Accessibility API appropriate to progress bar user-interface
- * elements.
- * <p>
- * <strong>Warning:</strong>
- * Serialized objects of this class will not be compatible with
- * future Swing releases. The current serialization support is
- * appropriate for short term storage or RMI between applications running
- * the same version of Swing. As of 1.4, support for long term storage
- * of all JavaBeans<sup><font size="-2">TM</font></sup>
- * has been added to the <code>java.beans</code> package.
- * Please see {@link java.beans.XMLEncoder}.
- */
- protected class AccessibleJProgressBar extends AccessibleJComponent
- implements AccessibleValue {
-
- /**
- * Gets the state set of this object.
- *
- * @return an instance of AccessibleState containing the current state
- * of the object
- * @see AccessibleState
- */
- public AccessibleStateSet getAccessibleStateSet() {
- AccessibleStateSet states = super.getAccessibleStateSet();
- if (getModel().getValueIsAdjusting()) {
- states.add(AccessibleState.BUSY);
- }
- if (getOrientation() == VERTICAL) {
- states.add(AccessibleState.VERTICAL);
- } else {
- states.add(AccessibleState.HORIZONTAL);
- }
- return states;
- }
-
- /**
- * Gets the role of this object.
- *
- * @return an instance of AccessibleRole describing the role of the
- * object
- */
- public AccessibleRole getAccessibleRole() {
- return AccessibleRole.PROGRESS_BAR;
- }
-
- /**
- * Gets the <code>AccessibleValue</code> associated with this object. In the
- * implementation of the Java Accessibility API for this class,
- * returns this object, which is responsible for implementing the
- * <code>AccessibleValue</code> interface on behalf of itself.
- *
- * @return this object
- */
- public AccessibleValue getAccessibleValue() {
- return this;
- }
-
- /**
- * Gets the accessible value of this object.
- *
- * @return the current value of this object
- */
- public Number getCurrentAccessibleValue() {
- return new Integer(getValue());
- }
-
- /**
- * Sets the value of this object as a <code>Number</code>.
- *
- * @return <code>true</code> if the value was set
- */
- public boolean setCurrentAccessibleValue(Number n) {
- // TIGER- 4422535
- if (n == null) {
- return false;
- }
- setValue(n.intValue());
- return true;
- }
-
- /**
- * Gets the minimum accessible value of this object.
- *
- * @return the minimum value of this object
- */
- public Number getMinimumAccessibleValue() {
- return new Integer(getMinimum());
- }
-
- /**
- * Gets the maximum accessible value of this object.
- *
- * @return the maximum value of this object
- */
- public Number getMaximumAccessibleValue() {
- // TIGER - 4422362
- return new Integer(model.getMaximum() - model.getExtent());
- }
-
- } // AccessibleJProgressBar
- }