diff options
Diffstat (limited to 'libjava/java/awt/Scrollbar.java')
-rw-r--r-- | libjava/java/awt/Scrollbar.java | 1296 |
1 files changed, 674 insertions, 622 deletions
diff --git a/libjava/java/awt/Scrollbar.java b/libjava/java/awt/Scrollbar.java index 7cc9715..9141ea5 100644 --- a/libjava/java/awt/Scrollbar.java +++ b/libjava/java/awt/Scrollbar.java @@ -1,5 +1,5 @@ /* Scrollbar.java -- AWT Scrollbar widget - Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 + Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. This file is part of GNU Classpath. @@ -45,694 +45,603 @@ import java.awt.peer.ScrollbarPeer; import java.util.EventListener; import javax.accessibility.Accessible; - -/** - * This class implements a scrollbar widget. - * - * @author Aaron M. Renn (arenn@urbanophile.com) - * @author Tom Tromey <tromey@cygnus.com> - */ -public class Scrollbar extends Component implements Accessible, - Adjustable -{ - -// FIXME: Serialization readObject/writeObject - -/* - * Static Variables +import javax.accessibility.AccessibleContext; +import javax.accessibility.AccessibleRole; +import javax.accessibility.AccessibleState; +import javax.accessibility.AccessibleStateSet; +import javax.accessibility.AccessibleValue; + +/** + * This class implements a scrollbar widget. + * + * @author Aaron M. Renn (arenn@urbanophile.com) + * @author Tom Tromey (tromey@cygnus.com) + * @author Andrew John Hughes (gnu_andrew@member.fsf.org) */ +public class Scrollbar extends Component implements Accessible, Adjustable +{ + // FIXME: Serialization readObject/writeObject -/** - * Constant indicating that a scrollbar is horizontal. - */ -public static final int HORIZONTAL = 0; - -/** - * Constant indicating that a scrollbar is vertical. - */ -public static final int VERTICAL = 1; + /** + * Constant indicating that a scrollbar is horizontal. + */ + public static final int HORIZONTAL = 0; -// Serialization Constant -private static final long serialVersionUID = 8451667562882310543L; + /** + * Constant indicating that a scrollbar is vertical. + */ + public static final int VERTICAL = 1; -/*************************************************************************/ + /** + * Serialization Constant. + */ + private static final long serialVersionUID = 8451667562882310543L; -/** - * @serial The amount by which the value of the scrollbar is changed - * when incrementing in line mode. - */ -private int lineIncrement; + /** + * @serial The amount by which the value of the scrollbar is changed + * when incrementing in line mode. + */ + private int lineIncrement; -/** - * @serial The amount by which the value of the scrollbar is changed - * when incrementing in page mode. - */ -private int pageIncrement; + /** + * @serial The amount by which the value of the scrollbar is changed + * when incrementing in page mode. + */ + private int pageIncrement; -/** - * @serial The maximum value for this scrollbar - */ -private int maximum; + /** + * @serial The maximum value for this scrollbar + */ + private int maximum; -/** - * @serial The minimum value for this scrollbar - */ -private int minimum; + /** + * @serial The minimum value for this scrollbar + */ + private int minimum; -/** - * @serial The orientation of this scrollbar, which will be either - * the <code>HORIZONTAL</code> or <code>VERTICAL</code> constant - * from this class. - */ -private int orientation; + /** + * @serial The orientation of this scrollbar, which will be either + * the <code>HORIZONTAL</code> or <code>VERTICAL</code> constant + * from this class. + */ + private int orientation; -/** - * @serial The current value of this scrollbar. - */ -private int value; + /** + * @serial The current value of this scrollbar. + */ + private int value; -/** - * @serial The width of the scrollbar's thumb, which is relative - * to the minimum and maximum value of the scrollbar. - */ -private int visibleAmount; + /** + * @serial The width of the scrollbar's thumb, which is relative + * to the minimum and maximum value of the scrollbar. + */ + private int visibleAmount; -// List of AdjustmentListener's. -private AdjustmentListener adjustment_listeners; + /** + * List of AdjustmentListener's. + */ + private AdjustmentListener adjustment_listeners; -private transient boolean valueIsAdjusting = false; + /** + * true if the scrollbar is adjusting, false otherwise. + */ + private transient boolean valueIsAdjusting = false; - /* + /** * The number used to generate the name returned by getName. */ private static transient long next_scrollbar_number; -/*************************************************************************/ - -/* - * Constructors - */ - -/** - * Initializes a new instance of <code>Scrollbar</code> with a - * vertical orientation and default values for all other parameters. - * - * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, - */ -public -Scrollbar() -{ - this(VERTICAL); -} - -/*************************************************************************/ - -/** - * Initializes a new instance of <code>Scrollbar</code> with the - * specified orientation and default values for all other parameters. - * The orientation must be either the constant <code>HORIZONTAL</code> or - * <code>VERTICAL</code> from this class. An incorrect value will throw - * an exception. - * - * @param orientation The orientation of this scrollbar. - * - * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, - * @exception IllegalArgumentException If the orientation value is not valid. - */ -public -Scrollbar(int orientation) throws IllegalArgumentException -{ - this(orientation, 0, 10, 0, 100); -} - -/*************************************************************************/ - -/** - * Initializes a new instance of <code>Scrollbar</code> with the - * specified parameters. The orientation must be either the constant - * <code>HORIZONTAL</code> or <code>VERTICAL</code>. An incorrect value - * will throw an exception. Inconsistent values for other parameters - * are silently corrected to valid values. - * - * @param orientation The orientation of this scrollbar. - * @param value The initial value of the scrollbar. - * @param visibleAmount The width of the scrollbar thumb. - * @param minimum The minimum value of the scrollbar. - * @param maximum The maximum value of the scrollbar. - * - * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, - * @exception IllegalArgumentException If the orientation value is not valid. - */ -public -Scrollbar(int orientation, int value, int visibleAmount, int minimum, - int maximum) throws IllegalArgumentException -{ - if (GraphicsEnvironment.isHeadless()) - throw new HeadlessException (); - - if ((orientation != HORIZONTAL) && (orientation != VERTICAL)) - throw new IllegalArgumentException("Bad orientation value: " - + orientation); - - this.orientation = orientation; - - setValues(value, visibleAmount, minimum, maximum); - - // Default is 1 according to online docs. - lineIncrement = 1; - - // Default is 10 according to javadocs. - pageIncrement = 10; -} - -/*************************************************************************/ - -/* - * Instance Methods - */ - -/** - * Returns the orientation constant for this object. - * - * @return The orientation constant for this object. - */ -public int -getOrientation() -{ - return(orientation); -} - -/*************************************************************************/ - -/** - * Sets the orientation of this scrollbar to the specified value. This - * value must be either the constant <code>HORIZONTAL</code> or - * <code>VERTICAL</code> from this class or an exception will be thrown. - * - * @param orientation The new orientation value. - * - * @exception IllegalArgumentException If the orientation value is not valid. - */ -public void -setOrientation(int orientation) -{ - if ((orientation != HORIZONTAL) && (orientation != VERTICAL)) - throw new IllegalArgumentException("Bad orientation value: " - + orientation); - - // FIXME: Communicate to peer? Or must this be called before peer creation? - this.orientation = orientation; -} - -/*************************************************************************/ - -/** - * Returns the current value for this scrollbar. - * - * @return The current value for this scrollbar. - */ -public int -getValue() -{ - return(value); -} - -/*************************************************************************/ - -/** - * Sets the current value for this scrollbar to the specified value. - * If this is inconsistent with the minimum and maximum values for this - * scrollbar, the value is silently adjusted. - * - * @param value The new value for this scrollbar. - */ -public void -setValue(int value) -{ - setValues(value, visibleAmount, minimum, maximum); -} - -/*************************************************************************/ - -/** - * Returns the maximum value for this scrollbar. - * - * @return The maximum value for this scrollbar. - */ -public int -getMaximum() -{ - return(maximum); -} - -/*************************************************************************/ - -/** - * Sets the maximum value for this scrollbar to the specified value. - * If the value is less than the current minimum value, it is silent - * set to equal the minimum value. - * - * @param maximum The new maximum value for this scrollbar. - */ -public void -setMaximum(int maximum) -{ - setValues(value, visibleAmount, minimum, maximum); -} - -/*************************************************************************/ - -/** - * Returns the minimum value for this scrollbar. - * - * @return The minimum value for this scrollbar. - */ -public int -getMinimum() -{ - return(minimum); -} - -/*************************************************************************/ - -/** - * Sets the minimum value for this scrollbar to the specified value. If - * this is not consistent with the current value and maximum, it is - * silently adjusted to be consistent. - * - * @param minimum The new minimum value for this scrollbar. - */ -public void -setMinimum(int minimum) -{ - setValues(value, visibleAmount, minimum, maximum); -} - -/*************************************************************************/ - -/** - * Returns the width of the scrollbar's thumb, in units relative to the - * maximum and minimum value of the scrollbar. - * - * @return The width of the scrollbar's thumb. - */ -public int -getVisibleAmount() -{ - return getVisible (); -} - -/*************************************************************************/ - -/** - * Returns the width of the scrollbar's thumb, in units relative to the - * maximum and minimum value of the scrollbar. - * - * @return The width of the scrollbar's thumb. - * - * @deprecated This method is deprecated in favor of - * <code>getVisibleAmount()</code>. - */ -public int -getVisible() -{ - return visibleAmount; -} - -/*************************************************************************/ - -/** - * Sets the width of the scrollbar's thumb, in units relative to the - * maximum and minimum value of the scrollbar. - * - * @param visibleAmount The new visible amount value of the scrollbar. - */ -public void -setVisibleAmount(int visibleAmount) -{ - setValues(value, visibleAmount, minimum, maximum); -} - -/*************************************************************************/ - -/** - * Sets the current value, visible amount, minimum, and maximum for this - * scrollbar. These values are adjusted to be internally consistent - * if necessary. - * - * @param value The new value for this scrollbar. - * @param visibleAmount The new visible amount for this scrollbar. - * @param minimum The new minimum value for this scrollbar. - * @param maximum The new maximum value for this scrollbar. - */ -public synchronized void -setValues(int value, int visibleAmount, int minimum, int maximum) -{ - if (maximum < minimum) - maximum = minimum; - - if (value < minimum) - value = minimum; - - if (value > maximum) - value = maximum; - - if (visibleAmount > maximum - minimum) - visibleAmount = maximum - minimum; - - ScrollbarPeer peer = (ScrollbarPeer) getPeer (); - if (peer != null - && (this.value != value || this.visibleAmount != visibleAmount - || this.minimum != minimum || this.maximum != maximum)) - peer.setValues(value, visibleAmount, minimum, maximum); - - this.value = value; - this.visibleAmount = visibleAmount; - this.minimum = minimum; - this.maximum = maximum; - - int range = maximum - minimum; - if (lineIncrement > range) - { - if (range == 0) - lineIncrement = 1; - else - lineIncrement = range; - - if (peer != null) - peer.setLineIncrement(lineIncrement); - } - - if (pageIncrement > range) - { - if (range == 0) - pageIncrement = 1; - else - pageIncrement = range; - - if (peer != null) - peer.setPageIncrement(pageIncrement); - } -} - -/*************************************************************************/ + /** + * Initializes a new instance of <code>Scrollbar</code> with a + * vertical orientation and default values for all other parameters. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, + */ + public Scrollbar() + { + this(VERTICAL); + } -/** - * Returns the value added or subtracted when the user activates the scrollbar - * scroll by a "unit" amount. - * - * @return The unit increment value. - */ -public int -getUnitIncrement() -{ - return getLineIncrement (); -} + /** + * Initializes a new instance of <code>Scrollbar</code> with the + * specified orientation and default values for all other parameters. + * The orientation must be either the constant <code>HORIZONTAL</code> or + * <code>VERTICAL</code> from this class. An incorrect value will throw + * an exception. + * + * @param orientation The orientation of this scrollbar. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, + * @exception IllegalArgumentException If the orientation value is not valid. + */ + public Scrollbar(int orientation) throws IllegalArgumentException + { + this(orientation, 0, 10, 0, 100); + } -/*************************************************************************/ + /** + * Initializes a new instance of <code>Scrollbar</code> with the + * specified parameters. The orientation must be either the constant + * <code>HORIZONTAL</code> or <code>VERTICAL</code>. An incorrect value + * will throw an exception. Inconsistent values for other parameters + * are silently corrected to valid values. + * + * @param orientation The orientation of this scrollbar. + * @param value The initial value of the scrollbar. + * @param visibleAmount The width of the scrollbar thumb. + * @param minimum The minimum value of the scrollbar. + * @param maximum The maximum value of the scrollbar. + * + * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true, + * @exception IllegalArgumentException If the orientation value is not valid. + */ + public Scrollbar(int orientation, int value, int visibleAmount, int minimum, + int maximum) throws IllegalArgumentException + { + if (GraphicsEnvironment.isHeadless()) + throw new HeadlessException(); -/** - * Returns the value added or subtracted when the user selects the scrollbar - * scroll by a "unit" amount control. - * - * @return The unit increment value. - * - * @deprecated This method is deprecated in favor of - * <code>getUnitIncrement()</code>. - */ -public int -getLineIncrement() -{ - return lineIncrement; -} + if ((orientation != HORIZONTAL) && (orientation != VERTICAL)) + throw new IllegalArgumentException("Bad orientation value: " + + orientation); -/*************************************************************************/ + this.orientation = orientation; -/** - * Sets the value added or subtracted to the scrollbar value when the - * user selects the scroll by a "unit" amount control. - * - * @param unitIncrement The new unit increment amount. - */ -public synchronized void -setUnitIncrement(int unitIncrement) -{ - setLineIncrement (unitIncrement); -} + setValues(value, visibleAmount, minimum, maximum); -/*************************************************************************/ + // Default is 1 according to online docs. + lineIncrement = 1; -/** - * Sets the value added or subtracted to the scrollbar value when the - * user selects the scroll by a "unit" amount control. - * - * @param lineIncrement The new unit increment amount. - * - * @deprecated This method is deprecated in favor of - * <code>setUnitIncrement()</code>. - */ -public void -setLineIncrement(int lineIncrement) -{ - if (lineIncrement < 0) - throw new IllegalArgumentException ("Unit increment less than zero."); + // Default is 10 according to javadocs. + pageIncrement = 10; + } - int range = maximum - minimum; - if (lineIncrement > range) - { - if (range == 0) - lineIncrement = 1; - else - lineIncrement = range; - } + /** + * Returns the orientation constant for this object. + * + * @return The orientation constant for this object. + */ + public int getOrientation() + { + return orientation; + } - if (lineIncrement == this.lineIncrement) - return; + /** + * Sets the orientation of this scrollbar to the specified value. This + * value must be either the constant <code>HORIZONTAL</code> or + * <code>VERTICAL</code> from this class or an exception will be thrown. + * + * @param orientation The new orientation value. + * + * @exception IllegalArgumentException If the orientation value is not valid. + */ + public void setOrientation(int orientation) + { + if ((orientation != HORIZONTAL) && (orientation != VERTICAL)) + throw new IllegalArgumentException("Bad orientation value: " + + orientation); - this.lineIncrement = lineIncrement; + // FIXME: Communicate to peer? Or must this be called before peer creation? + this.orientation = orientation; + } - ScrollbarPeer peer = (ScrollbarPeer) getPeer (); - if (peer != null) - peer.setLineIncrement (this.lineIncrement); -} + /** + * Returns the current value for this scrollbar. + * + * @return The current value for this scrollbar. + */ + public int getValue() + { + return value; + } -/*************************************************************************/ + /** + * Sets the current value for this scrollbar to the specified value. + * If this is inconsistent with the minimum and maximum values for this + * scrollbar, the value is silently adjusted. + * + * @param value The new value for this scrollbar. + */ + public void setValue(int value) + { + setValues(value, visibleAmount, minimum, maximum); + } -/** - * Returns the value added or subtracted when the user activates the scrollbar - * scroll by a "block" amount. - * - * @return The block increment value. - */ -public int -getBlockIncrement() -{ - return getPageIncrement (); -} + /** + * Returns the maximum value for this scrollbar. + * + * @return The maximum value for this scrollbar. + */ + public int getMaximum() + { + return maximum; + } -/*************************************************************************/ + /** + * Sets the maximum value for this scrollbar to the specified value. + * If the value is less than the current minimum value, it is silent + * set to equal the minimum value. + * + * @param maximum The new maximum value for this scrollbar. + */ + public void setMaximum(int maximum) + { + setValues(value, visibleAmount, minimum, maximum); + } -/** - * Returns the value added or subtracted when the user selects the scrollbar - * scroll by a "block" amount control. - * - * @return The block increment value. - * - * @deprecated This method is deprecated in favor of - * <code>getBlockIncrement()</code>. - */ -public int -getPageIncrement() -{ - return pageIncrement; -} + /** + * Returns the minimum value for this scrollbar. + * + * @return The minimum value for this scrollbar. + */ + public int getMinimum() + { + return minimum; + } -/*************************************************************************/ + /** + * Sets the minimum value for this scrollbar to the specified value. If + * this is not consistent with the current value and maximum, it is + * silently adjusted to be consistent. + * + * @param minimum The new minimum value for this scrollbar. + */ + public void setMinimum(int minimum) + { + setValues(value, visibleAmount, minimum, maximum); + } -/** - * Sets the value added or subtracted to the scrollbar value when the - * user selects the scroll by a "block" amount control. - * - * @param blockIncrement The new block increment amount. - */ -public synchronized void -setBlockIncrement(int blockIncrement) -{ - setPageIncrement (blockIncrement); -} + /** + * Returns the width of the scrollbar's thumb, in units relative to the + * maximum and minimum value of the scrollbar. + * + * @return The width of the scrollbar's thumb. + */ + public int getVisibleAmount() + { + return getVisible(); + } -/*************************************************************************/ + /** + * Returns the width of the scrollbar's thumb, in units relative to the + * maximum and minimum value of the scrollbar. + * + * @return The width of the scrollbar's thumb. + * + * @deprecated This method is deprecated in favor of + * <code>getVisibleAmount()</code>. + */ + public int getVisible() + { + return visibleAmount; + } -/** - * Sets the value added or subtracted to the scrollbar value when the - * user selects the scroll by a "block" amount control. - * - * @param pageIncrement The new block increment amount. - * - * @deprecated This method is deprecated in favor of - * <code>setBlockIncrement()</code>. - */ -public void -setPageIncrement(int pageIncrement) -{ - if (pageIncrement < 0) - throw new IllegalArgumentException ("Block increment less than zero."); + /** + * Sets the width of the scrollbar's thumb, in units relative to the + * maximum and minimum value of the scrollbar. + * + * @param visibleAmount The new visible amount value of the scrollbar. + */ + public void setVisibleAmount(int visibleAmount) + { + setValues(value, visibleAmount, minimum, maximum); + } - int range = maximum - minimum; - if (pageIncrement > range) - { - if (range == 0) - pageIncrement = 1; - else - pageIncrement = range; - } + /** + * Sets the current value, visible amount, minimum, and maximum for this + * scrollbar. These values are adjusted to be internally consistent + * if necessary. + * + * @param value The new value for this scrollbar. + * @param visibleAmount The new visible amount for this scrollbar. + * @param minimum The new minimum value for this scrollbar. + * @param maximum The new maximum value for this scrollbar. + */ + public synchronized void setValues(int value, int visibleAmount, + int minimum, int maximum) + { + if (maximum < minimum) + maximum = minimum; + + if (value < minimum) + value = minimum; + + if (value > maximum) + value = maximum; + + if (visibleAmount > maximum - minimum) + visibleAmount = maximum - minimum; + + ScrollbarPeer peer = (ScrollbarPeer) getPeer(); + if (peer != null + && (this.value != value || this.visibleAmount != visibleAmount + || this.minimum != minimum || this.maximum != maximum)) + peer.setValues(value, visibleAmount, minimum, maximum); + + this.value = value; + this.visibleAmount = visibleAmount; + this.minimum = minimum; + this.maximum = maximum; + + int range = maximum - minimum; + if (lineIncrement > range) + { + if (range == 0) + lineIncrement = 1; + else + lineIncrement = range; + + if (peer != null) + peer.setLineIncrement(lineIncrement); + } + + if (pageIncrement > range) + { + if (range == 0) + pageIncrement = 1; + else + pageIncrement = range; + + if (peer != null) + peer.setPageIncrement(pageIncrement); + } + } - if (pageIncrement == this.pageIncrement) - return; + /** + * Returns the value added or subtracted when the user activates the scrollbar + * scroll by a "unit" amount. + * + * @return The unit increment value. + */ + public int getUnitIncrement() + { + return getLineIncrement(); + } - this.pageIncrement = pageIncrement; + /** + * Returns the value added or subtracted when the user selects the scrollbar + * scroll by a "unit" amount control. + * + * @return The unit increment value. + * + * @deprecated This method is deprecated in favor of + * <code>getUnitIncrement()</code>. + */ + public int getLineIncrement() + { + return lineIncrement; + } - ScrollbarPeer peer = (ScrollbarPeer) getPeer (); - if (peer != null) - peer.setPageIncrement (this.pageIncrement); -} + /** + * Sets the value added or subtracted to the scrollbar value when the + * user selects the scroll by a "unit" amount control. + * + * @param unitIncrement The new unit increment amount. + */ + public synchronized void setUnitIncrement(int unitIncrement) + { + setLineIncrement(unitIncrement); + } -/*************************************************************************/ + /** + * Sets the value added or subtracted to the scrollbar value when the + * user selects the scroll by a "unit" amount control. + * + * @param lineIncrement The new unit increment amount. + * + * @deprecated This method is deprecated in favor of + * <code>setUnitIncrement()</code>. + */ + public void setLineIncrement(int lineIncrement) + { + if (lineIncrement < 0) + throw new IllegalArgumentException("Unit increment less than zero."); + + int range = maximum - minimum; + if (lineIncrement > range) + { + if (range == 0) + lineIncrement = 1; + else + lineIncrement = range; + } + + if (lineIncrement == this.lineIncrement) + return; + + this.lineIncrement = lineIncrement; + + ScrollbarPeer peer = (ScrollbarPeer) getPeer(); + if (peer != null) + peer.setLineIncrement(this.lineIncrement); + } -/** - * Notifies this object to create its native peer. - */ -public synchronized void -addNotify() -{ - if (peer == null) - peer = getToolkit ().createScrollbar (this); - super.addNotify (); -} + /** + * Returns the value added or subtracted when the user activates the scrollbar + * scroll by a "block" amount. + * + * @return The block increment value. + */ + public int getBlockIncrement() + { + return getPageIncrement(); + } -/*************************************************************************/ + /** + * Returns the value added or subtracted when the user selects the scrollbar + * scroll by a "block" amount control. + * + * @return The block increment value. + * + * @deprecated This method is deprecated in favor of + * <code>getBlockIncrement()</code>. + */ + public int getPageIncrement() + { + return pageIncrement; + } -/** - * Adds a new adjustment listener to the list of registered listeners - * for this object. - * - * @param listener The listener to add. - */ -public synchronized void -addAdjustmentListener(AdjustmentListener listener) -{ - adjustment_listeners = AWTEventMulticaster.add(adjustment_listeners, listener); - enableEvents(AWTEvent.ADJUSTMENT_EVENT_MASK); -} + /** + * Sets the value added or subtracted to the scrollbar value when the + * user selects the scroll by a "block" amount control. + * + * @param blockIncrement The new block increment amount. + */ + public synchronized void setBlockIncrement(int blockIncrement) + { + setPageIncrement(blockIncrement); + } -/*************************************************************************/ + /** + * Sets the value added or subtracted to the scrollbar value when the + * user selects the scroll by a "block" amount control. + * + * @param pageIncrement The new block increment amount. + * + * @deprecated This method is deprecated in favor of + * <code>setBlockIncrement()</code>. + */ + public void setPageIncrement(int pageIncrement) + { + if (pageIncrement < 0) + throw new IllegalArgumentException("Block increment less than zero."); + + int range = maximum - minimum; + if (pageIncrement > range) + { + if (range == 0) + pageIncrement = 1; + else + pageIncrement = range; + } + + if (pageIncrement == this.pageIncrement) + return; + + this.pageIncrement = pageIncrement; + + ScrollbarPeer peer = (ScrollbarPeer) getPeer(); + if (peer != null) + peer.setPageIncrement(this.pageIncrement); + } -/** - * Removes the specified listener from the list of registered listeners - * for this object. - * - * @param listener The listener to remove. - */ -public synchronized void -removeAdjustmentListener(AdjustmentListener listener) -{ - adjustment_listeners = AWTEventMulticaster.remove(adjustment_listeners, - listener); -} + /** + * Notifies this object to create its native peer. + */ + public synchronized void addNotify() + { + if (peer == null) + peer = getToolkit().createScrollbar(this); + super.addNotify(); + } -/*************************************************************************/ + /** + * Adds a new adjustment listener to the list of registered listeners + * for this object. + * + * @param listener The listener to add. + */ + public synchronized void addAdjustmentListener(AdjustmentListener listener) + { + adjustment_listeners = AWTEventMulticaster.add(adjustment_listeners, + listener); + enableEvents(AWTEvent.ADJUSTMENT_EVENT_MASK); + } -/** - * Processes events for this scrollbar. It does this by calling - * <code>processAdjustmentEvent()</code> if the event is an instance of - * <code>AdjustmentEvent</code>, otherwise it calls the superclass to - * process the event. - * - * @param event The event to process. - */ -protected void -processEvent(AWTEvent event) -{ - if (event instanceof AdjustmentEvent) - processAdjustmentEvent((AdjustmentEvent)event); - else - super.processEvent(event); -} + /** + * Removes the specified listener from the list of registered listeners + * for this object. + * + * @param listener The listener to remove. + */ + public synchronized void removeAdjustmentListener(AdjustmentListener listener) + { + adjustment_listeners = AWTEventMulticaster.remove(adjustment_listeners, + listener); + } -/*************************************************************************/ + /** + * Processes events for this scrollbar. It does this by calling + * <code>processAdjustmentEvent()</code> if the event is an instance of + * <code>AdjustmentEvent</code>, otherwise it calls the superclass to + * process the event. + * + * @param event The event to process. + */ + protected void processEvent(AWTEvent event) + { + if (event instanceof AdjustmentEvent) + processAdjustmentEvent((AdjustmentEvent) event); + else + super.processEvent(event); + } -/** - * Processes adjustment events for this object by dispatching them to - * any registered listeners. Note that this method will only be called - * if adjustment events are enabled. This will happen automatically if - * any listeners are registered. Otherwise, it can be enabled by a - * call to <code>enableEvents()</code>. - * - * @param event The event to process. - */ -protected void -processAdjustmentEvent(AdjustmentEvent event) -{ - value = event.getValue(); - if (adjustment_listeners != null) - adjustment_listeners.adjustmentValueChanged(event); -} + /** + * Processes adjustment events for this object by dispatching them to + * any registered listeners. Note that this method will only be called + * if adjustment events are enabled. This will happen automatically if + * any listeners are registered. Otherwise, it can be enabled by a + * call to <code>enableEvents()</code>. + * + * @param event The event to process. + */ + protected void processAdjustmentEvent(AdjustmentEvent event) + { + value = event.getValue(); + if (adjustment_listeners != null) + adjustment_listeners.adjustmentValueChanged(event); + } -void -dispatchEventImpl(AWTEvent e) -{ - if (e.id <= AdjustmentEvent.ADJUSTMENT_LAST + void dispatchEventImpl(AWTEvent e) + { + if (e.id <= AdjustmentEvent.ADJUSTMENT_LAST && e.id >= AdjustmentEvent.ADJUSTMENT_FIRST && (adjustment_listeners != null || (eventMask & AWTEvent.ADJUSTMENT_EVENT_MASK) != 0)) - processEvent(e); - else - super.dispatchEventImpl(e); -} - -/*************************************************************************/ + processEvent(e); + else + super.dispatchEventImpl(e); + } -/** - * Returns a debugging string for this object. - * - * @return A debugging string for this object. - */ -protected String -paramString() -{ - return("value=" + getValue() + ",visibleAmount=" + - getVisibleAmount() + ",minimum=" + getMinimum() - + ",maximum=" + getMaximum() - + ",pageIncrement=" + pageIncrement - + ",lineIncrement=" + lineIncrement - + ",orientation=" + (orientation == HORIZONTAL - ? "HORIZONTAL" : "VERTICAL") - + super.paramString()); -} + /** + * Returns a debugging string for this object. + * + * @return A debugging string for this object. + */ + protected String paramString() + { + return ("value=" + getValue() + ",visibleAmount=" + getVisibleAmount() + + ",minimum=" + getMinimum() + ",maximum=" + getMaximum() + + ",pageIncrement=" + pageIncrement + ",lineIncrement=" + + lineIncrement + ",orientation=" + + (orientation == HORIZONTAL ? "HORIZONTAL" : "VERTICAL") + + super.paramString()); + } /** * Returns an array of all the objects currently registered as FooListeners - * upon this <code>Scrollbar</code>. FooListeners are registered using the + * upon this <code>Scrollbar</code>. FooListeners are registered using the * addFooListener method. * * @exception ClassCastException If listenerType doesn't specify a class or * interface that implements java.util.EventListener. */ - public EventListener[] getListeners (Class listenerType) + public EventListener[] getListeners(Class listenerType) { if (listenerType == AdjustmentListener.class) - return AWTEventMulticaster.getListeners (adjustment_listeners, - listenerType); + return AWTEventMulticaster.getListeners(adjustment_listeners, + listenerType); - return super.getListeners (listenerType); + return super.getListeners(listenerType); } /** * Returns an array of all registered adjustment listeners. */ - public AdjustmentListener[] getAdjustmentListeners () + public AdjustmentListener[] getAdjustmentListeners() { - return (AdjustmentListener[]) getListeners (AdjustmentListener.class); + return (AdjustmentListener[]) getListeners(AdjustmentListener.class); } /** @@ -740,7 +649,7 @@ paramString() * * @since 1.4 */ - public boolean getValueIsAdjusting () + public boolean getValueIsAdjusting() { return valueIsAdjusting; } @@ -750,7 +659,7 @@ paramString() * * @since 1.4 */ - public void setValueIsAdjusting (boolean valueIsAdjusting) + public void setValueIsAdjusting(boolean valueIsAdjusting) { this.valueIsAdjusting = valueIsAdjusting; } @@ -760,14 +669,157 @@ paramString() * * @return A unique name for this scroll bar. */ - String generateName () + String generateName() { - return "scrollbar" + getUniqueLong (); + return "scrollbar" + getUniqueLong(); } - private static synchronized long getUniqueLong () + private static synchronized long getUniqueLong() { return next_scrollbar_number++; } -} // class Scrollbar + /** + * This class provides accessibility support for the + * scrollbar. + * + * @author Jerry Quinn (jlquinn@optonline.net) + * @author Andrew John Hughes (gnu_andrew@member.fsf.org) + */ + protected class AccessibleAWTScrollBar extends AccessibleAWTComponent + implements AccessibleValue + { + /** + * Serialization constant to match JDK 1.5 + */ + private static final long serialVersionUID = -344337268523697807L; + + /** + * Returns the role of this accessible object. + * + * @return the instance of <code>AccessibleRole</code>, + * which describes this object. + * + * @see javax.accessibility.AccessibleRole + */ + public AccessibleRole getAccessibleRole() + { + return AccessibleRole.SCROLL_BAR; + } + + /** + * Returns the state set of this accessible object. + * + * @return a set of <code>AccessibleState</code>s which + * represent the current state of the accessible object. + * + * @see javax.accessibility.AccessibleState + * @see javax.accessibility.AccessibleStateSet + */ + public AccessibleStateSet getAccessibleStateSet() + { + AccessibleStateSet states = super.getAccessibleStateSet(); + if (getOrientation() == HORIZONTAL) + states.add(AccessibleState.HORIZONTAL); + else + states.add(AccessibleState.VERTICAL); + if (getValueIsAdjusting()) + states.add(AccessibleState.BUSY); + return states; + } + + /** + * Returns an implementation of the <code>AccessibleValue</code> + * interface for this accessible object. In this case, the + * current instance is simply returned (with a more appropriate + * type), as it also implements the accessible value as well as + * the context. + * + * @return the accessible value associated with this context. + * + * @see javax.accessibility.AccessibleValue + */ + public AccessibleValue getAccessibleValue() + { + return this; + } + + /** + * Returns the current value of this accessible object. + * In this case, this is the same as the value for + * the scrollbar, wrapped in an <code>Integer</code> + * object. + * + * @return the numeric value of this scrollbar. + * + * @see javax.accessibility.AccessibleValue#getCurrentAccessibleValue() + */ + public Number getCurrentAccessibleValue() + { + return new Integer(getValue()); + } + + /** + * Sets the current value of this accessible object + * to that supplied. In this case, the value of the + * scrollbar is set, and this method always returns + * true. + * + * @param number the new accessible value. + * + * @return true if the value was set. + * + * @see javax.accessibility.AccessibleValue#setCurrentAccessibleValue(java.lang.Number) + */ + public boolean setCurrentAccessibleValue(Number number) + { + setValue(number.intValue()); + return true; + } + + /** + * Returns the minimum acceptable accessible value used + * by this object. In this case, this is the same as + * the minimum value of the scrollbar, wrapped in an + * object. + * + * @return the minimum value of this scrollbar. + * + * @see javax.accessibility.AccessibleValue#getMinimumAccessibleValue() + */ + public Number getMinimumAccessibleValue() + { + return new Integer(getMinimum()); + } + + /** + * Returns the maximum acceptable accessible value used + * by this object. In this case, this is the same as + * the maximum value of the scrollbar, wrapped in an + * object. + * + * @return the maximum value of this scrollbar. + * + * @see javax.accessibility.AccessibleValue#getMaximumAccessibleValue() + */ + public Number getMaximumAccessibleValue() + { + return new Integer(getMaximum()); + } + } + + /** + * Gets the AccessibleContext associated with this <code>Scrollbar</code>. + * The context is created, if necessary. + * + * @return the associated context + */ + public AccessibleContext getAccessibleContext() + { + /* Create the context if this is the first request */ + if (accessibleContext == null) + accessibleContext = new AccessibleAWTScrollBar(); + + return accessibleContext; + } +} |