summaryrefslogtreecommitdiff
path: root/libjava/classpath/javax/swing/JSlider.java
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/classpath/javax/swing/JSlider.java')
-rw-r--r--libjava/classpath/javax/swing/JSlider.java641
1 files changed, 408 insertions, 233 deletions
diff --git a/libjava/classpath/javax/swing/JSlider.java b/libjava/classpath/javax/swing/JSlider.java
index b28b06abad7..ed94c4ecc19 100644
--- a/libjava/classpath/javax/swing/JSlider.java
+++ b/libjava/classpath/javax/swing/JSlider.java
@@ -1,5 +1,5 @@
/* JSlider.java --
- Copyright (C) 2002, 2004, 2005 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -50,6 +50,7 @@ import java.util.Hashtable;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
+import javax.accessibility.AccessibleState;
import javax.accessibility.AccessibleStateSet;
import javax.accessibility.AccessibleValue;
import javax.swing.event.ChangeEvent;
@@ -57,13 +58,12 @@ import javax.swing.event.ChangeListener;
import javax.swing.plaf.SliderUI;
/**
- * The JSlider is a Swing component that allows selection of a value within a
+ * A visual component that allows selection of a value within a
* range by adjusting a thumb in a track. The values for the minimum,
* maximum, extent and value are stored in a {@link
* DefaultBoundedRangeModel}.
- *
* <p>
- * JSliders have the following properties:
+ * A <code>JSlider</code> component has the following properties:
* </p>
*
* <table>
@@ -72,38 +72,38 @@ import javax.swing.plaf.SliderUI;
* <tr><td> inverted </td><td> slider </td><td> yes </td></tr>
* <tr><td> labelTable </td><td> slider </td><td> yes </td></tr>
* <tr><td> majorTickSpacing </td><td> slider </td><td> yes </td></tr>
- * <tr><td> maximum </td><td> model </td><td> no </td></tr>
- * <tr><td> minimum </td><td> model </td><td> no </td></tr>
+ * <tr><td> maximum </td><td> model </td><td> yes </td></tr>
+ * <tr><td> minimum </td><td> model </td><td> yes </td></tr>
* <tr><td> minorTickSpacing </td><td> slider </td><td> yes </td></tr>
* <tr><td> model </td><td> slider </td><td> yes </td></tr>
* <tr><td> orientation </td><td> slider </td><td> yes </td></tr>
* <tr><td> paintLabels </td><td> slider </td><td> yes </td></tr>
* <tr><td> paintTicks </td><td> slider </td><td> yes </td></tr>
- * <tr><td> snapToTicks </td><td> slider </td><td> no </td></tr>
+ * <tr><td> snapToTicks </td><td> slider </td><td> yes </td></tr>
* <tr><td> value </td><td> model </td><td> no </td></tr>
* <tr><td> valueIsAdjusting </td><td> model </td><td> no </td></tr>
* </table>
*
* <p>
- * The various behavioral aspects of these properties follows:
+ * The various behavioural aspects of these properties follows:
* </p>
*
* <ul>
* <li>
- * When non-bound properties stored in the slider change, the slider fires
- * ChangeEvents to its ChangeListeners.
+ * When a non-bound property stored in the slider changes, the slider fires
+ * a {@link ChangeEvent} to its change listeners.
* </li>
* <li>
- * When bound properties stored in the slider change, the slider fires
- * PropertyChangeEvents to its PropertyChangeListeners
+ * When a bound property stored in the slider changes, the slider fires a
+ * {@link PropertyChangeEvent} to its property change listeners.
* </li>
* <li>
- * If any of the model's properties change, it fires a ChangeEvent to its
- * ChangeListeners, which include the slider.
+ * If any of the model's properties change, it fires a {@link ChangeEvent} to
+ * its listeners, which include the slider.
* </li>
* <li>
- * If the slider receives a ChangeEvent from its model, it will propagate the
- * ChangeEvent to its ChangeListeners, with the ChangeEvent's "source"
+ * If the slider receives a {@link ChangeEvent} from its model, it will
+ * propagate the event to its own change listeners, with the event's "source"
* property set to refer to the slider, rather than the model.
* </li>
* </ul>
@@ -112,21 +112,19 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
ImageObserver,
MenuContainer, Serializable
{
- /** DOCUMENT ME! */
private static final long serialVersionUID = -1441275936141218479L;
/**
- * DOCUMENT ME!
+ * Provides the accessibility features for the <code>JSlider</code>
+ * component.
*/
- // FIXME: This inner class is a complete stub and needs to be implemented
- // properly.
protected class AccessibleJSlider extends JComponent.AccessibleJComponent
implements AccessibleValue
{
private static final long serialVersionUID = -6301740148041106789L;
/**
- * Creates a new AccessibleJSlider object.
+ * Creates a new <code>AccessibleJSlider</code> instance.
*/
protected AccessibleJSlider()
{
@@ -134,75 +132,97 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * DOCUMENT ME!
+ * Returns a set containing the current state of the {@link JSlider}
+ * component.
*
- * @return DOCUMENT ME!
+ * @return The accessible state set.
*/
public AccessibleStateSet getAccessibleStateSet()
{
- return null;
+ AccessibleStateSet result = super.getAccessibleStateSet();
+ if (orientation == JSlider.HORIZONTAL)
+ result.add(AccessibleState.HORIZONTAL);
+ else if (orientation == JSlider.VERTICAL)
+ result.add(AccessibleState.VERTICAL);
+ return result;
}
/**
- * DOCUMENT ME!
+ * Returns the accessible role for the <code>JSlider</code> component.
*
- * @return DOCUMENT ME!
+ * @return {@link AccessibleRole#SLIDER}.
*/
public AccessibleRole getAccessibleRole()
{
- return null;
+ return AccessibleRole.SLIDER;
}
/**
- * DOCUMENT ME!
+ * Returns an object that provides access to the current, minimum and
+ * maximum values for the {@link JSlider}. Since this class implements
+ * {@link AccessibleValue}, it returns itself.
*
- * @return DOCUMENT ME!
+ * @return The accessible value.
*/
public AccessibleValue getAccessibleValue()
{
- return null;
+ return this;
}
/**
- * DOCUMENT ME!
+ * Returns the current value of the {@link JSlider} component, as an
+ * {@link Integer}.
*
- * @return DOCUMENT ME!
+ * @return The current value of the {@link JSlider} component.
*/
public Number getCurrentAccessibleValue()
{
- return null;
+ return new Integer(getValue());
}
/**
- * setCurrentAccessibleValue
+ * Sets the current value of the {@link JSlider} component and sends a
+ * {@link PropertyChangeEvent} (with the property name
+ * {@link AccessibleContext#ACCESSIBLE_VALUE_PROPERTY}) to all registered
+ * listeners. If the supplied value is <code>null</code>, this method
+ * does nothing and returns <code>false</code>.
*
- * @param value0 TODO
+ * @param value the new slider value (<code>null</code> permitted).
*
- * @return boolean
+ * @return <code>true</code> if the slider value is updated, and
+ * <code>false</code> otherwise.
*/
- public boolean setCurrentAccessibleValue(Number value0)
+ public boolean setCurrentAccessibleValue(Number value)
{
- return false;
+ if (value == null)
+ return false;
+ Number oldValue = getCurrentAccessibleValue();
+ setValue(value.intValue());
+ firePropertyChange(AccessibleContext.ACCESSIBLE_VALUE_PROPERTY, oldValue,
+ new Integer(getValue()));
+ return true;
}
/**
- * getMinimumAccessibleValue
+ * Returns the minimum value of the {@link JSlider} component, as an
+ * {@link Integer}.
*
- * @return Number
+ * @return The minimum value of the {@link JSlider} component.
*/
public Number getMinimumAccessibleValue()
{
- return null;
+ return new Integer(getMinimum());
}
/**
- * getMaximumAccessibleValue
+ * Returns the maximum value of the {@link JSlider} component, as an
+ * {@link Integer}.
*
- * @return Number
+ * @return The maximum value of the {@link JSlider} component.
*/
public Number getMaximumAccessibleValue()
{
- return null;
+ return new Integer(getMaximum());
}
}
@@ -221,33 +241,36 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
*/
private transient Dictionary labelTable;
- /** The model used to describe the slider. */
+ /** The model used to store the slider's range and current value. */
protected BoundedRangeModel sliderModel;
- /** The space between major ticks. */
+ /** The space/distance between major ticks. */
protected int majorTickSpacing;
- /** The space between minor ticks. */
+ /** The space/distance between minor ticks. */
protected int minorTickSpacing;
/** Whether the slider snaps its values to ticks. */
protected boolean snapToTicks = false;
- /** The orientation of the slider. */
+ /** The orientation (horizontal or vertical) of the slider. */
protected int orientation = HORIZONTAL;
/** Whether the slider is inverted. */
private transient boolean isInverted;
- /** The ChangeListener that listens to the model. */
+ /**
+ * The listener that monitors the slider's model and forwards events to the
+ * slider's listeners (see <code>createChangeListener()</code>).
+ */
protected ChangeListener changeListener;
- /** The ChangeEvent that is passed to all listeners of this slider. */
+ /** The change event that is passed to all listeners of this slider. */
protected transient ChangeEvent changeEvent;
/**
- * Creates a new horizontal JSlider object with a minimum of 0, a maximum of
- * 100, and a value of 50.
+ * Creates a new horizontal <code>JSlider</code> instance with a minimum of
+ * 0, a maximum of 100, and a value of 50.
*/
public JSlider()
{
@@ -255,8 +278,8 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a new JSlider object with the given orientation and a minimum of
- * 0, a maximum of 100, and a value of 50.
+ * Creates a new <code>JSlider</code> instance with the given orientation
+ * and a minimum of 0, a maximum of 100, and a value of 50.
*
* @param orientation The orientation of the slider ({@link #HORIZONTAL} or
* {@link #VERTICAL}).
@@ -270,12 +293,15 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a new horizontal JSlider object with the given maximum and
- * minimum and a value that is halfway between the minimum and the
+ * Creates a new horizontal <code>JSlider</code> instance with the given
+ * maximum and minimum and a value that is halfway between the minimum and the
* maximum.
*
- * @param minimum The minimum value of the JSlider.
- * @param maximum The maximum value of the JSlider.
+ * @param minimum The minimum value.
+ * @param maximum The maximum value.
+ *
+ * @throws IllegalArgumentException if <code>minimum</code> is greater than
+ * <code>maximum</code>.
*/
public JSlider(int minimum, int maximum)
{
@@ -283,12 +309,17 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a new horizontal JSlider object with the given minimum, maximum,
- * and value.
+ * Creates a new horizontal <code>JSlider</code> instance with the given
+ * minimum, maximum, and value.
*
- * @param minimum The minimum value of the JSlider.
- * @param maximum The maximum value of the JSlider.
- * @param value The initial value of the JSlider.
+ * @param minimum The minimum value.
+ * @param maximum The maximum value.
+ * @param value The initial value.
+ *
+ * @throws IllegalArgumentException if <code>value</code> is not in the
+ * specified range.
+ * @throws IllegalArgumentException if <code>minimum</code> is greater than
+ * <code>maximum</code>.
*/
public JSlider(int minimum, int maximum, int value)
{
@@ -296,8 +327,8 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a new JSlider object with the given orientation, minimum,
- * maximum, and value.
+ * Creates a new <code>JSlider</code> instance with the given orientation,
+ * minimum, maximum, and value.
*
* @param orientation The orientation of the slider ({@link #HORIZONTAL} or
* {@link #VERTICAL}).
@@ -306,13 +337,18 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
* @param value The initial value of the JSlider.
*
* @throws IllegalArgumentException if <code>orientation</code> is not one of
- * the specified values.
+ * the specified values.
+ * @throws IllegalArgumentException if <code>value</code> is not in the
+ * specified range.
+ * @throws IllegalArgumentException if <code>minimum</code> is greater than
+ * <code>maximum</code>.
*/
public JSlider(int orientation, int minimum, int maximum, int value)
{
sliderModel = new DefaultBoundedRangeModel(value, 0, minimum, maximum);
if (orientation != HORIZONTAL && orientation != VERTICAL)
- throw new IllegalArgumentException(orientation + " is not a legal orientation");
+ throw new IllegalArgumentException(orientation
+ + " is not a legal orientation");
this.orientation = orientation;
changeListener = createChangeListener();
sliderModel.addChangeListener(changeListener);
@@ -320,7 +356,8 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a new horizontal JSlider object with the given model.
+ * Creates a new horizontal <code>JSlider</code> instance with the given
+ * model.
*
* @param model The model (<code>null</code> not permitted).
*
@@ -335,9 +372,11 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns the current value of the slider.
+ * Returns the slider's value (from the slider's model).
*
- * @return The value of the slider stored in the model.
+ * @return The value of the slider.
+ *
+ * @see #setValue(int)
*/
public int getValue()
{
@@ -345,9 +384,15 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets the value of the slider.
+ * Sets the slider's value and sends a {@link ChangeEvent} to all
+ * registered listeners. Note that the model will fire a change event to all
+ * of its registered listeners first (with the model as the event source) and
+ * then the slider will fire another change event to all of its registered
+ * listeners (this time with the slider as the event source).
*
- * @param value The slider's new value.
+ * @param value the new value.
+ *
+ * @see #getValue()
*/
public void setValue(int value)
{
@@ -355,7 +400,7 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns the slider's UI delegate.
+ * Returns the slider's UI delegate.
*
* @return The slider's UI delegate.
*/
@@ -365,9 +410,9 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets the slider's UI delegate.
+ * Sets the slider's UI delegate.
*
- * @param ui A SliderUI object to use with this slider.
+ * @param ui the UI delegate.
*/
public void setUI(SliderUI ui)
{
@@ -375,21 +420,20 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets this slider's UI to the UIManager's default for the
- * current look and feel.
+ * Sets this slider's UI delegate to the default (obtained from the
+ * {@link UIManager}) for the current look and feel.
*/
public void updateUI()
{
setUI((SliderUI) UIManager.getUI(this));
- invalidate();
- repaint();
}
/**
- * This method returns a name to identify which look and feel class will be
- * the UI delegate for the slider.
+ * Returns the suffix (<code>"SliderUI"</code> in this case) used to
+ * determine the class name for a UI delegate that can provide the look and
+ * feel for a <code>JSlider</code>.
*
- * @return The Look and Feel classID. "SliderUI"
+ * @return <code>"SliderUI"</code>.
*/
public String getUIClassID()
{
@@ -397,29 +441,36 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a ChangeListener for this Slider.
+ * Creates a {@link ChangeListener} that is added to the slider's model and
+ * forwards change events generated by the model to the listeners that are
+ * registered with the <code>JSlider</code> (by calling the
+ * {@link #fireStateChanged} method).
*
- * @return A new ChangeListener.
+ * @return A new listener.
*/
protected ChangeListener createChangeListener()
{
return new ChangeListener()
{
- public void stateChanged(ChangeEvent ce)
- {
- // No need to trigger a repaint since the UI listens to the model
- // as well. All we need to do is pass on the stateChanged event
- // to our listeners.
- fireStateChanged();
- }
+ public void stateChanged(ChangeEvent ce)
+ {
+ // No need to trigger a repaint since the UI listens to the model
+ // as well. All we need to do is pass on the stateChanged event
+ // to our listeners.
+ fireStateChanged();
+ }
};
}
/**
- * This method registers a listener to this slider. The listener will be
- * informed of new ChangeEvents.
+ * Registers a listener with the slider so that it will receive
+ * {@link ChangeEvent} notifications. Note that change events generated
+ * by the slider's model will be forwarded automatically to the slider's
+ * listeners.
*
- * @param listener The listener to register.
+ * @param listener the listener to register.
+ *
+ * @see #removeChangeListener(ChangeListener)
*/
public void addChangeListener(ChangeListener listener)
{
@@ -427,9 +478,12 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method removes a listener from this slider.
+ * Removes a listener from this slider so that it will no longer receive
+ * {@link ChangeEvent} notifications from the slider.
*
* @param listener The listener to remove.
+ *
+ * @see #addChangeListener(ChangeListener)
*/
public void removeChangeListener(ChangeListener listener)
{
@@ -437,9 +491,8 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method is called whenever the model fires a ChangeEvent. It should
- * propagate the ChangeEvent to its listeners with a new ChangeEvent that
- * identifies the slider as the source.
+ * Sends a {@link ChangeEvent} to all registered listeners, with this slider
+ * as the source.
*/
protected void fireStateChanged()
{
@@ -448,16 +501,19 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
changeEvent = new ChangeEvent(this);
for (int i = changeListeners.length - 2; i >= 0; i -= 2)
{
- if (changeListeners[i] == ChangeListener.class)
- ((ChangeListener) changeListeners[i + 1]).stateChanged(changeEvent);
+ if (changeListeners[i] == ChangeListener.class)
+ ((ChangeListener) changeListeners[i + 1]).stateChanged(changeEvent);
}
}
/**
- * This method returns an array of all ChangeListeners listening to this
- * slider.
+ * Returns an array containing all the {@link ChangeListener} instances
+ * registered with this slider. If no listeners are registered, this method
+ * returns an empty array.
*
- * @return An array of ChangeListeners listening to this slider.
+ * @return An array array containing all the {@link ChangeListener} instances
+ * registered with this slider (possibly empty, but never
+ * <code>null</code>).
*/
public ChangeListener[] getChangeListeners()
{
@@ -465,9 +521,12 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns the model of the slider.
+ * Returns the slider's model, which stores the minimum, maximum and current
+ * values.
*
* @return The slider's model.
+ *
+ * @see #setModel(BoundedRangeModel)
*/
public BoundedRangeModel getModel()
{
@@ -475,11 +534,16 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "model" property. It also needs to unregister
- * any listeners to the old model and register any listeners to the new
- * model.
+ * Sets the slider's model and sends a {@link PropertyChangeEvent} (with the
+ * property name "model") to all registered listeners. The change listener
+ * that the slider registered with the original model is removed and added
+ * to the new model (this ensures that {@link ChangeEvent} notifications
+ * generated by the model are automatically forwarded to listeners that are
+ * registered with the slider).
*
* @param model The model to use with the slider.
+ *
+ * @see #getModel()
*/
public void setModel(BoundedRangeModel model)
{
@@ -488,18 +552,20 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
// and bork the next time it tries to access the model.
if (model != sliderModel)
{
- BoundedRangeModel oldModel = sliderModel;
- sliderModel = model;
- oldModel.removeChangeListener(changeListener);
- sliderModel.addChangeListener(changeListener);
- firePropertyChange("model", oldModel, sliderModel);
+ BoundedRangeModel oldModel = sliderModel;
+ sliderModel = model;
+ oldModel.removeChangeListener(changeListener);
+ sliderModel.addChangeListener(changeListener);
+ firePropertyChange("model", oldModel, sliderModel);
}
}
/**
- * This method returns the minimum value of the slider.
+ * Returns the minimum value of the slider (from the slider's model).
*
* @return The minimum value of the slider.
+ *
+ * @see #setMinimum(int)
*/
public int getMinimum()
{
@@ -507,9 +573,20 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets the minimum value of the slider.
- *
+ * Sets the minimum value of the slider and fires a
+ * {@link PropertyChangeEvent} (with the property name "minimum") to all
+ * registered listeners. Note that:
+ * <p>
+ * <ul>
+ * <li>the minimum value is stored in the slider's model (see
+ * {@link #getModel()});</li>
+ * <li>in addition to the property change event, the slider also fires a
+ * {@link ChangeEvent}.</li>
+ * </ul>
+ *
* @param minimum The minimum value of the slider.
+ *
+ * @see #getMinimum()
*/
public void setMinimum(int minimum)
{
@@ -520,9 +597,11 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns the maximum value of the slider.
+ * Returns the slider's maximum value (obtained from the slider's model).
*
* @return The maximum value of the slider.
+ *
+ * @see #setMaximum(int)
*/
public int getMaximum()
{
@@ -530,9 +609,20 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets the maximum value of the slider.
+ * Sets the maximum value of the slider and fires a
+ * {@link PropertyChangeEvent} (with the property name "maximum") to all
+ * registered listeners. Note that:
+ * <p>
+ * <ul>
+ * <li>the maximum value is stored in the slider's model (see
+ * {@link #getModel()});</li>
+ * <li>in addition to the property change event, the slider also fires a
+ * {@link ChangeEvent}.</li>
+ * </ul>
*
* @param maximum The maximum value of the slider.
+ *
+ * @see #getMaximum()
*/
public void setMaximum(int maximum)
{
@@ -543,10 +633,11 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns this slider's isAdjusting value which is true if the
- * thumb is being dragged.
+ * Returns the <code>valueIsAdjusting</code> flag from the slider's model.
*
- * @return The slider's isAdjusting value.
+ * @return The <code>valueIsAdjusting</code> flag from the slider's model.
+ *
+ * @see #setValueIsAdjusting(boolean)
*/
public boolean getValueIsAdjusting()
{
@@ -554,9 +645,12 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets the isAdjusting value for the slider.
+ * Sets the <code>valueIsAdjusting</code> flag in the slider's model, and
+ * sends a {@link ChangeEvent} to all registered listeners.
*
- * @param adjusting The slider's isAdjusting value.
+ * @param adjusting the new flag value.
+ *
+ * @see #getValueIsAdjusting()
*/
public void setValueIsAdjusting(boolean adjusting)
{
@@ -564,9 +658,11 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns the extent value for this slider.
+ * Returns the slider's extent value, obtained from the slider's model.
*
- * @return The extent value for this slider.
+ * @return The extent value.
+ *
+ * @see #setExtent(int)
*/
public int getExtent()
{
@@ -574,9 +670,15 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets the extent value for this slider.
+ * Sets the slider's extent value and sends a {@link ChangeEvent} to all
+ * registered listeners. Note that the model will fire a change event to all
+ * of its registered listeners first (with the model as the event source) and
+ * then the slider will fire another change event to all of its registered
+ * listeners (this time with the slider as the event source).
*
* @param extent The extent value for this slider.
+ *
+ * @see #getExtent()
*/
public void setExtent(int extent)
{
@@ -584,9 +686,12 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns the slider orientation.
+ * Returns the orientation of the slider, either {@link JSlider#HORIZONTAL}
+ * or {@link JSlider#VERTICAL}.
*
* @return The orientation of the slider.
+ *
+ * @see #setOrientation(int)
*/
public int getOrientation()
{
@@ -594,28 +699,37 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "orientation" property of this slider. If the
- * orientation is not VERTICAL or HORIZONTAL, this method does nothing.
+ * Sets the orientation for the slider and sends a
+ * {@link PropertyChangeEvent} (with the property name "orientation") to all
+ * registered listeners.
*
- * @param orientation The orientation of this slider.
+ * @param orientation the orientation (one of {@link JSlider#HORIZONTAL} or
+ * {@link JSlider#VERTICAL}).
+ *
+ * @throws IllegalArgumentException if <code>orientation</code> is not one of
+ * the permitted values.
+ *
+ * @see #getOrientation()
*/
public void setOrientation(int orientation)
{
if (orientation != VERTICAL && orientation != HORIZONTAL)
- throw new IllegalArgumentException("orientation must be one of: VERTICAL, HORIZONTAL");
+ throw new IllegalArgumentException(
+ "orientation must be one of: VERTICAL, HORIZONTAL");
if (orientation != this.orientation)
{
- int oldOrientation = this.orientation;
- this.orientation = orientation;
- firePropertyChange("orientation", oldOrientation,
- this.orientation);
+ int oldOrientation = this.orientation;
+ this.orientation = orientation;
+ firePropertyChange("orientation", oldOrientation, this.orientation);
}
}
/**
- * This method returns the label table for this slider.
+ * Returns the label table for the slider.
*
- * @return The label table for this slider.
+ * @return The label table for the slider (possibly <code>null</code>).
+ *
+ * @see #setLabelTable(Dictionary)
*/
public Dictionary getLabelTable()
{
@@ -623,23 +737,27 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "labelTable" property of this slider.
+ * Sets the table of labels for the slider and sends a
+ * {@link PropertyChangeEvent} (with the property name "labelTable") to all
+ * registered listeners.
*
- * @param table The label table for this slider.
+ * @param table the table of labels (<code>null</code> permitted).
+ *
+ * @see #getLabelTable()
*/
public void setLabelTable(Dictionary table)
{
if (table != labelTable)
{
- Dictionary oldTable = labelTable;
- labelTable = table;
- firePropertyChange("labelTable", oldTable, labelTable);
+ Dictionary oldTable = labelTable;
+ labelTable = table;
+ firePropertyChange("labelTable", oldTable, labelTable);
}
}
/**
- * This method is called to reset UI delegates for the labels in the
- * labelTable to a default for the current look and feel.
+ * Resets the UI delegates for the labels in the <code>labelTable</code> to
+ * the default for the current look and feel.
*/
protected void updateLabelUIs()
{
@@ -647,20 +765,20 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
return;
for (Enumeration list = labelTable.elements(); list.hasMoreElements();)
{
- JLabel label = (JLabel) list.nextElement();
- label.updateUI();
+ JLabel label = (JLabel) list.nextElement();
+ label.updateUI();
}
}
/**
- * Creates a hashtable of (Integer, JLabel) pairs that can be used as a
- * label table for this slider. The labels will start from the sliders
- * minimum and increase by the increment. Each label will have a text
- * string indicating their integer value.
+ * Creates a hashtable of <code>(Integer, JLabel)</code> pairs that can be
+ * used as a label table for this slider. The labels will start from the
+ * slider's minimum and increase by the increment. Each label will have a text
+ * string indicating its integer value.
*
* @param increment The increment between labels (must be > 0).
*
- * @return A hashtable with the labels and their keys.
+ * @return A hashtable containing the labels.
*
* @throws IllegalArgumentException if <code>increment</code> is not greater
* than zero.
@@ -671,10 +789,10 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * Creates a hashtable of (Integer, JLabel) pairs that can be used as a
- * label table for this slider. The labels will start from the given start
- * value and increase by the increment. Each label will have a text string
- * indicating its integer value.
+ * Creates a hashtable of <code>(Integer, JLabel)</code> pairs that can be
+ * used as a label table for this slider. The labels will start from the
+ * given start value and increase by the increment. Each label will have a
+ * text string indicating its integer value.
*
* @param increment The increment between labels (must be > 0).
* @param start The value to start from.
@@ -699,29 +817,29 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
for (int i = start; i <= max; i += increment)
{
- label = new JLabel(String.valueOf(i));
- label.setVerticalAlignment(CENTER);
- label.setHorizontalAlignment(CENTER);
-
- // Make sure these labels have the width and height
- // they want.
- dim = label.getPreferredSize();
- label.setBounds(label.getX(), label.getY(),
- (int) dim.getWidth(),
- (int) dim.getHeight());
- table.put(new Integer(i), label);
+ label = new JLabel(String.valueOf(i));
+ label.setVerticalAlignment(CENTER);
+ label.setHorizontalAlignment(CENTER);
+
+ // Make sure these labels have the width and height
+ // they want.
+ dim = label.getPreferredSize();
+ label.setBounds(label.getX(), label.getY(),
+ (int) dim.getWidth(),
+ (int) dim.getHeight());
+ table.put(new Integer(i), label);
}
return table;
}
/**
- * This method returns whether the slider is inverted. Horizontal sliders
- * that are not inverted will have the minimums on the left. If they are
- * inverted, the minimums will be on the right. Vertical sliders that are
- * not inverted will have the minimums at the bottom. If they are inverted,
- * the minimums will be at the top.
+ * Returns the flag that controls whether or not the value scale for the
+ * slider is inverted (the default value is <code>false</code>).
*
- * @return Whether this slider is inverted.
+ * @return The flag that controls whether or not the value scale for the
+ * slider is inverted.
+ *
+ * @see #setInverted(boolean)
*/
public boolean getInverted()
{
@@ -729,30 +847,36 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "inverted" property for this slider.Horizontal
- * sliders that are not inverted will have the minimums on the left. If
- * they are inverted, the minimums will be on the right. Vertical sliders
- * that are not inverted will have the minimums at the bottom. If they are
- * inverted, the minimums will be at the top. However, if the slider's
- * componentOrientation is set to RIGHT_TO_LEFT, then everything gets
- * reversed again.
+ * Sets the flag that controls whether or not the value scale for the
+ * slider is inverted and, if the new flag value is different to the old flag
+ * value, sends a {@link PropertyChangeEvent} to all registered listeners.
+ * Typically, a horizontal slider will display a scale that increases from
+ * left to right, but this is reversed if the 'inverted' flag is set to
+ * <code>true</code>. Similarly, a vertical slider will display a scale that
+ * increases from bottom to top, and this is reversed if the 'inverted' flag
+ * is set to <code>true</code>.
*
- * @param inverted Whether the slider should be inverted.
+ * @param inverted the new flag value.
+ *
+ * @see #getInverted()
*/
public void setInverted(boolean inverted)
{
if (isInverted != inverted)
{
- boolean oldInverted = isInverted;
- isInverted = inverted;
- firePropertyChange("inverted", oldInverted, isInverted);
+ boolean oldInverted = isInverted;
+ isInverted = inverted;
+ firePropertyChange("inverted", oldInverted, isInverted);
}
}
/**
- * This method returns the amount of units between each major tick mark.
+ * Returns the distance between major tick marks along the slider's value
+ * scale.
*
* @return The amount of units between each major tick mark.
+ *
+ * @see #setMajorTickSpacing(int)
*/
public int getMajorTickSpacing()
{
@@ -760,26 +884,32 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "majorTickSpacing" property for this slider. The
- * major tick spacing is the amount of units between each major tick mark.
+ * Sets the distance between major tick marks along the slider's value scale,
+ * and sends a {@link PropertyChangeEvent} (with the property name
+ * "majorTickSpacing") to all registered listeners.
*
- * @param spacing The amount of units between each major tick mark.
+ * @param spacing the distance between major tick marks.
+ *
+ * @see #getMajorTickSpacing()
*/
public void setMajorTickSpacing(int spacing)
{
if (majorTickSpacing != spacing)
{
- int oldSpacing = majorTickSpacing;
- majorTickSpacing = spacing;
- firePropertyChange("majorTickSpacing", oldSpacing,
- majorTickSpacing);
+ int oldSpacing = majorTickSpacing;
+ majorTickSpacing = spacing;
+ firePropertyChange("majorTickSpacing", oldSpacing, majorTickSpacing);
}
}
/**
- * This method returns the amount of units between each minor tick mark.
+ * Returns the distance between minor tick marks along the slider's value
+ * scale.
*
- * @return The amount of units between each minor tick mark.
+ * @return The distance between minor tick marks along the slider's value
+ * scale.
+ *
+ * @see #setMinorTickSpacing(int)
*/
public int getMinorTickSpacing()
{
@@ -787,28 +917,32 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "minorTickSpacing" property for this slider. The
- * minor tick spacing is the amount of units between each minor tick mark.
+ * Sets the distance between minor tick marks along the slider's value scale,
+ * and sends a {@link PropertyChangeEvent} (with the property name
+ * "minorTickSpacing") to all registered listeners.
*
- * @param spacing The amount of units between each minor tick mark.
+ * @param spacing the distance between minor tick marks.
+ *
+ * @see #getMinorTickSpacing()
*/
public void setMinorTickSpacing(int spacing)
{
if (minorTickSpacing != spacing)
{
- int oldSpacing = minorTickSpacing;
- minorTickSpacing = spacing;
- firePropertyChange("minorTickSpacing", oldSpacing,
- minorTickSpacing);
+ int oldSpacing = minorTickSpacing;
+ minorTickSpacing = spacing;
+ firePropertyChange("minorTickSpacing", oldSpacing, minorTickSpacing);
}
}
/**
- * This method returns whether this slider is snapping to ticks. Sliders
- * that snap to ticks will automatically move the thumb to the nearest tick
- * mark.
+ * Returns the flag that controls whether the slider thumb will snap to ticks.
+ * Sliders that snap to ticks will automatically move the thumb to the
+ * nearest tick mark.
*
- * @return Whether this slider snaps to ticks.
+ * @return <code>true</code> if the slider thumb automatically.
+ *
+ * @see #setSnapToTicks(boolean)
*/
public boolean getSnapToTicks()
{
@@ -816,28 +950,32 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method sets whether this slider will snap to ticks. Sliders that
- * snap to ticks will automatically move the thumb to the nearest tick
- * mark.
+ * Sets the flag that controls whether the slider thumb will snap to ticks
+ * and sends a {@link PropertyChangeEvent} (with the property name
+ * 'snapToTicks') to all registered listeners. Sliders that snap to ticks
+ * will automatically move the thumb to the nearest tick mark.
*
- * @param snap Whether this slider snaps to ticks.
+ * @param snap the new flag value.
+ *
+ * @see #getSnapToTicks()
*/
public void setSnapToTicks(boolean snap)
{
if (snap != snapToTicks)
{
- snapToTicks = snap;
- firePropertyChange("snapToTicks", !snap, snap);
+ snapToTicks = snap;
+ firePropertyChange("snapToTicks", !snap, snap);
}
}
/**
- * This method returns whether the slider will paint its tick marks. In
- * addition to setting this property to true, one of minor tick spacing or
- * major tick spacing must be set to a value greater than 0 in order for
- * ticks to be painted.
+ * Returns the flag that controls whether or not tick marks are painted along
+ * the slider's value scale.
*
- * @return Whether ticks will be painted.
+ * @return <code>true</code> if tick marks should be painted, and
+ * <code>false</code> if tick marks should not be painted.
+ *
+ * @see #setPaintTicks(boolean)
*/
public boolean getPaintTicks()
{
@@ -845,27 +983,33 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "paintTicks" property for this slider. In
- * addition to setting this property to true, one of minor tick spacing or
- * major tick spacing must be set to a value greater than 0 in order for
- * ticks to be painted.
+ * Sets the flag that controls whether or not tick marks are painted along
+ * the slider's value scale, and sends a {@link PropertyChangeEvent} (with
+ * the property name "paintTicks") to all registered listeners. In
+ * addition to setting this property to <code>true</code>, one or both of the
+ * minor tick spacing and major tick spacing attributes must be set to a
+ * value greater than 0 in order for ticks to be painted.
*
* @param paint Whether ticks will be painted.
+ *
+ * @see #getPaintTicks()
*/
public void setPaintTicks(boolean paint)
{
if (paint != paintTicks)
{
- boolean oldPaintTicks = paintTicks;
- paintTicks = paint;
- firePropertyChange("paintTicks", oldPaintTicks, paintTicks);
+ boolean oldPaintTicks = paintTicks;
+ paintTicks = paint;
+ firePropertyChange("paintTicks", oldPaintTicks, paintTicks);
}
}
/**
- * This method returns whether the track will be painted.
+ * Returns the flag that controls whether or not the track is painted.
*
* @return Whether the track will be painted.
+ *
+ * @see #setPaintTrack(boolean)
*/
public boolean getPaintTrack()
{
@@ -878,6 +1022,8 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
* registered listeners.
*
* @param paint Whether the track will be painted.
+ *
+ * @see #getPaintTrack()
*/
public void setPaintTrack(boolean paint)
{
@@ -889,9 +1035,12 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method returns whether labels will be painted.
+ * Returns the flag that controls whether or not labels are painted for the
+ * tick marks along the slider.
*
* @return Whether labels will be painted.
+ *
+ * @see #setPaintLabels(boolean)
*/
public boolean getPaintLabels()
{
@@ -899,36 +1048,62 @@ public class JSlider extends JComponent implements SwingConstants, Accessible,
}
/**
- * This method changes the "paintLabels" property.
+ * Sets the flag that controls whether or not labels are painted for the
+ * tick marks along the slider and sends a {@link PropertyChangeEvent} (with
+ * the property name "paintLabels") to all registered listeners.
*
* @param paint Whether labels will be painted.
+ *
+ * @see #getPaintLabels()
*/
public void setPaintLabels(boolean paint)
{
if (paint != paintLabels)
{
- paintLabels = paint;
- if (paint && majorTickSpacing > 0)
+ paintLabels = paint;
+ if (paint && majorTickSpacing > 0 && labelTable == null)
labelTable = createStandardLabels(majorTickSpacing);
- firePropertyChange("paintLabels", !paint, paint);
+ firePropertyChange("paintLabels", !paint, paint);
}
}
/**
- * This method is used primarily for debugging purposes and returns a string
- * that can be used to represent this slider.
+ * Returns an implementation-dependent string describing the attributes of
+ * this <code>JSlider</code>.
*
- * @return A string representing this slider.
+ * @return A string describing the attributes of this <code>JSlider</code>
+ * (never <code>null</code>).
*/
protected String paramString()
{
- return "JSlider";
+ String superParamStr = super.paramString();
+ StringBuffer sb = new StringBuffer();
+ sb.append(",isInverted=").append(getInverted());
+ sb.append(",majorTickSpacing=").append(getMajorTickSpacing());
+ sb.append(",minorTickSpacing=").append(getMinorTickSpacing());
+ sb.append(",orientation=");
+ if (orientation == HORIZONTAL)
+ sb.append("HORIZONTAL");
+ else
+ sb.append("VERTICAL");
+ sb.append(",paintLabels=").append(getPaintLabels());
+ sb.append(",paintTicks=").append(getPaintTicks());
+ sb.append(",paintTrack=").append(getPaintTrack());
+ sb.append(",snapToTicks=").append(getSnapToTicks());
+
+ // the following is output by the reference implementation. We don't
+ // strictly need to replicate this. Perhaps it has some meaning, but
+ // I couldn't determine it yet...
+ sb.append(",snapToValue=true");
+
+ return superParamStr + sb.toString();
}
/**
- * DOCUMENT ME!
+ * Returns the object that provides accessibility features for this
+ * <code>JSlider</code> component.
*
- * @return DOCUMENT ME!
+ * @return The accessible context (an instance of {@link AccessibleJSlider}).
*/
public AccessibleContext getAccessibleContext()
{