gcc/libjava/javax/swing/JScrollBar.java
Graydon Hoare 31e632d3e4 [multiple changes]
2004-04-09  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* gnu/java/awt/peer/gtk/GtkPanelPeer.java (connectSignals):
	Remove method.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c: Remove
	unused code.

2004-04-02  Olga Rodimina  <rodimina@redhat.com>

	* Makefile.am: Added new file.
	* Makefile.in: Regenerate.
	* javax/swing/ImageIcon.java:
	(ImageIcon(file)): set description of the icon
	to the file name
	* javax/swing/JCheckBoxMenuItem.java:
	Mostly Implemented. Work in progress.
	* javax/swing/JRadioButtonMenuItem.java:
 	Reimplement constructors to use JToggleButtonModel.
	* javax/swing/plaf/basic/BasicIconFactory.java:
	(getCheckBoxMenuItemIcon): return check box
	icon.
	* javax/swing/plaf/basic/BasicMenuItemUI.java:
	paint menu item selected only when it is armed and
	pressed.

2004-04-02  David Jee  <djee@redhat.com>

	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
	(GtkMenuItemPeer): Only connect signals if this isn't a Menu peer.
	* java/awt/Component.java
	(add): Set the parent of the popup as this component.
	* java/awt/PopupMenu.java
	(addNotify): Create popup menu when peer is null.
	(show): Call addNotify() if peer is null.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c
	(Java_gnu_java_awt_peer_gtk_GtkPopupMenuPeer_show): Set the button
	argument for gtk_menu_popup() as zero. This causes the popup menu to
	respond to any mouse button.

2004-03-31  Olga Rodimina  <rodimina@redhat.com>

	* Makefile.am: Added new file.
	* Makefile.in: Regenerate.
	* javax/swing/JRadioButtonMenuItem.java:
	Implemented.
	* javax/swing/plaf/basic/BasicIconFactory.java:
	(getRadioButtonMenuItemIcon): Return
	radio button icon.
	* javax/swing/plaf/basic/BasicMenuItemUI.java:
	(getPreferredSize): Add size of checkIcon if it
	exists.
	(installDefaults): Don't initialize checkIcon.
	It's value will be set in subclasses.
	(uninstallDefaults): remove uninstallation of
	checkIcon.
	(paint): Moved code to paintMenuItem().
	(paintMenuItem): Implemented.
	* javax/swing/plaf/basic/BasicRadioButtonMenuItemUI.java:
	UI delegate for JRadioButtonMenuItem.

2004-03-29  Olga Rodimina  <rodimina@redhat.com>

	* javax/swing/plaf/basic/BasicMenuItemUI.java:
	Corrected position of the accelerator.

2004-03-29  Olga Rodimina  <rodimina@redhat.com>

	* Makefile.am: Added new file.
	* Makefile.in: Regenerate.
	* javax/swing/JMenuItem.java: Partly
	implemented. Work in progress
	* javax/swing/plaf/basic/BasicLookAndFeel.java:
	Changed default value of acceleratorDelimiter.
	* javax/swing/plaf/basic/BasicMenuItemUI.java:
	New class. Partly implemented.

2004-03-26  Mark Wielaard  <mark@klomp.org>

	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
	(item_activate): Declare label before use.
	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c
	(gtkSetFont): Removed unused variable label.
	(addExposeFilter): Declare variables before use.
	(removeExposeFilter): Likewise.
	* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c
	(ok_clicked): Declare str_fileName before use.

2004-03-26  David Jee  <djee@redhat.com>

	* gnu/java/awt/peer/gtk/GtkMenuPeer.java
	(addSeparator): Remove.
	* java/awt/Menu.java
	(separator): Remove static final MenuItem field.
	(separatorLabel): New static final String field.
	(addSeparator): Do not use peer method; use add(MenuItem) instead.
	Use separatorLabel to denote that it is a separator.
	(insertSeparator): Create a new MenuItem with separatorLabel, instead
	of reusing the static separator instance, because a MenuItem instance
	can't be added more than once without being cloned.
	* java/awt/peer/MenuPeer.java
	(addSeparator): Remove from interface.

2004-03-26  David Jee  <djee@redhat.com>

	* gnu/java/awt/peer/gtk/GtkMenuItemPeer.java
	(connectSignals): New native method declaration.
	(GtkMenuItemPeer): Connect signals if the parent is a Menu.
	* java/awt/MenuItem.java
	(getActionCommand): Return the label if the action command is not set.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c
	(Java_gnu_java_awt_peer_gtk_GtkMenuBarPeer_addMenu): Use
	gtk_menu_shell_append().
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c
	(item_activate): Fix argument type.
	(Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_create): Do not connect
	signal here.
	(Java_gnu_java_awt_peer_gtk_GtkMenuItemPeer_connectSignals): New
	method.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c
	(Java_gnu_java_awt_peer_gtk_GtkMenuPeer_create): Check if a label is
	given. Add the menu widget's top-level GtkWindow to the global window
	group, so it can grab the pointer.
	(Java_gnu_java_awt_peer_gtk_GtkMenuPeer_addItem): Use
	gtk_menu_shell_append().

2004-03-23  Graydon Hoare  <graydon@redhat.com>

	* java/text/AttributedString.java
	(addAttribute): Fix off-by-one.
	(getIterator): Likewise.
	* java/text/AttributedStringIterator.java
	(getRunLimit): Correct logic.
	(getRunStart): Likewise.
	(getAttribute): Fix inequality.
	(getAttributes): Likewise.
	* testsuite/libjava.mauve/xfails: Remove AttributedString xfail.

2004-03-23  Kim Ho  <kho@redhat.com>

	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
	(calculateSizes): Return real width and height.

2004-03-23  Kim Ho  <kho@redhat.com>

	* javax/swing/plaf/basic/BasicTabbedPaneUI.java
	(calculateTabRects): Set the selectedRun before
	trying to rotate tabs.

2004-03-23  Kim Ho  <kho@redhat.com>

	* Makefile.am: New file
	* Makefile.in: Regenerate
	* java/awt/Graphics.java: (drawRect):
	Draw to the correct point.
	* javax/swing/DefaultSingleSelectionModel.java
	(isSelected): Return true if the selected index
	is not -1.
	* javax/swing/JLabel.java: Do not change mnemonic
	index if text is null.
	* javax/swing/JProgressBar.java: Use JComponent's
	EventListenerList.
	* javax/swing/JScrollBar.java: Ditto.
	* javax/swing/JSlider.java: Ditto.
	* javax/swing/JTabbedPane.java: Reimplement.
	* javax/swing/plaf/basic/BasicLookAndFeel.java:
	Add defaults for TabbedPane.
	* javax/swing/plaf/basic/BasicArrowButton.java:
	Implement
	* javax/swing/plaf/basic/BasicProgressBarUI.java:
	(paintDeterminate): Don't paint String if it's
	empty.
	(paintIndeterminate): ditto.
	* javax/swing/plaf/basic/BasicTabbedPaneUI.java:
	Reimplement.

2004-03-19  Michael Koch  <konqueror@gmx.de>

	* java/awt/image/AffineTransformOp.java
	(AffineTransformOp): Made public.
	* javax/swing/JComponent.java
	(listenerList): Made protected.
	(accessibleContext): Likewise.
	* javax/swing/JList.java
	(valueChanged): Dont use internal fields of ListSelectionEvent.
	* javax/swing/JViewport.java
	(getView): Dont use internal fields of Component.
	(addImpl): Likewise.
	* javax/swing/Timer.java
	(isRunning): Made public.
	(start): Likewise.
	(stop): Likewise.
	* javax/swing/UIDefaults.java
	(getInt): Made public.
	* javax/swing/plaf/basic/BasicListUI.java
	(mousePressed): Dont use internal fields of MouseEvent.
	(propertyChanged): Dont use internal fields of PropertyChangeEvent.
	* javax/swing/plaf/basic/BasicScrollBarUI.java
	(arrowIcon): Made static.
	* javax/swing/plaf/basic/BasicViewportUI.java
	(stateChanged): Dont use internal field on ChangeEvent.
	* javax/swing/text/JTextComponent.java
	(getUI): Call UIManager.getUI().
	(updateUI): Use getUI().

2004-03-19  Graydon Hoare  <graydon@redhat.com>

	* javax/swing/JComponent.java: Turn off double buffer by default.
	* javax/swing/plaf/basic/BasicViewportUI.java: Clear rects before painting.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_gdkDrawDrawable):
	Use cairo to copy areas.
	(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_cairoClip):
	Initialize and set clip region.

2004-03-15  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* java/applet/Applet.java (preferredSize): Override deprecated
	variant of getPreferredSize.
	(minimumSize): Override deprecated variant of getMinimumSize.

2004-03-15  Olga Rodimina  <rodimina@redhat.com>

	* gnu/java/awt/peer/gtk/GdkGraphics2D.java
	(drawImage(img,xform,bgcolor,obs)): New Method.
	Helper function that every drawImage method will
	use.
	(drawRaster): Added new parameter, bgcolor. All
	transparent pixels are changed to bgcolor before
	image is drawn.
	(drawRenderedImage): Fixed to use changed drawRaster().
	(drawImage(image,xform,obs): Fixed to use new helper function
	(drawImage(image,op,x,y)): Ditto.
	(drawImage (img,x,y,observer)): Ditto.
	((PainterThread) bgcolor): New Field.
	((PainterThread) (setPixels)): Changed all transparent pixels
	to bgcolor.
	(drawImage(img,x,y,width,height,bgcolor,observer)):
	Fixed FIXME - all the transparent pixels are
	changed to the specified bgcolor.
	(drawImage(img, x, y, width, height, observer): Changed to
	use function above.
	(drawImage (img,dx1,dy1,dx2,dy2,sx1,sy1,sx2,sy2,bgcolor,observer)):
	Fixed FIXME- changed all transparent pixels to bgcolor.
	(drawImage (img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2, observer)):
	Changed to use function above.

2004-03-14  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* java/applet/Applet.java (dimensions): New field.
	(getDimensions): New method.
	(getPreferredSize): Call getDimensions.
	(getMinimumSize): Likewise.

2004-03-13  Thomas Fitzsimmons  <fitzsim@redhat.com>

	* jni/classpath/jcl.c: Include stdlib.h, not malloc.h.
	* jni/classpath/jnilink.c: Likewise.

	* java/applet/Applet.java (getPreferredSize): New method.
	(getMinimumSize): New method.

From-SVN: r80762
2004-04-16 18:44:45 +00:00

733 lines
19 KiB
Java

/* JScrollBar.java --
Copyright (C) 2002, 2004 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
02111-1307 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package javax.swing;
import java.awt.Adjustable;
import java.awt.Dimension;
import java.awt.event.AdjustmentEvent;
import java.awt.event.AdjustmentListener;
import javax.accessibility.Accessible;
import javax.accessibility.AccessibleContext;
import javax.accessibility.AccessibleRole;
import javax.accessibility.AccessibleStateSet;
import javax.accessibility.AccessibleValue;
import javax.swing.SwingConstants;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.EventListenerList;
import javax.swing.plaf.ProgressBarUI;
import javax.swing.plaf.ScrollBarUI;
/**
* The JScrollBar. Two buttons control how the values that the
* scroll bar can take. You can also drag the thumb or click the track
* to move the scroll bar. Typically, the JScrollBar is used with
* other components to translate the value of the bar to the viewable
* contents of the other components.
*/
public class JScrollBar extends JComponent implements Adjustable, Accessible
{
/**
* DOCUMENT ME!
*/
protected class AccessibleJScrollBar extends JComponent.AccessibleJComponent
implements AccessibleValue
{
/**
* Creates a new AccessibleJSlider object.
*
* @param value0 DOCUMENT ME!
*/
protected AccessibleJScrollBar(JScrollBar value0)
{
super(value0);
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public AccessibleStateSet getAccessibleStateSet()
{
return null;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public AccessibleRole getAccessibleRole()
{
return null;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public AccessibleValue getAccessibleValue()
{
return null;
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public Number getCurrentAccessibleValue()
{
return null;
}
/**
* setCurrentAccessibleValue
*
* @param value0 TODO
*
* @return boolean
*/
public boolean setCurrentAccessibleValue(Number value0)
{
return false;
}
/**
* getMinimumAccessibleValue
*
* @return Number
*/
public Number getMinimumAccessibleValue()
{
return null;
}
/**
* getMaximumAccessibleValue
*
* @return Number
*/
public Number getMaximumAccessibleValue()
{
return null;
}
}
/** Fired in a PropertyChangeEvent when the "blockIncrement" changes. */
public static final String BLOCK_INCREMENT_CHANGED_PROPERTY = "blockIncrement";
/** Fired in a PropertyChangeEvent when the "model" changes. */
public static final String MODEL_CHANGED_PROPERTY = "model";
/** Fired in a PropertyChangeEvent when the "orientation" changes. */
public static final String ORIENTATION_CHANGED_PROPERTY = "orientation";
/** Fired in a PropertyChangeEvent when the "unitIncrement" changes. */
public static final String UNIT_INCREMENT_CHANGED_PROPERTY = "unitIncrement";
/** How much the thumb moves when moving in a block. */
protected int blockIncrement = 10;
/** The model that holds the scroll bar's data. */
protected BoundedRangeModel model;
/** The orientation of the scroll bar. */
protected int orientation = SwingConstants.HORIZONTAL;
/** How much the thumb moves when moving in a unit. */
protected int unitIncrement = 1;
/** The ChangeListener that listens to the model. */
private transient ChangeListener changeListener;
/** The ChangeEvent that's fired. */
private transient ChangeEvent changeEvent;
/**
* Creates a new horizontal JScrollBar object with a minimum
* of 0, a maxmium of 100, a value of 0 and an extent of 10.
*/
public JScrollBar()
{
this(SwingConstants.HORIZONTAL, 0, 10, 0, 100);
}
/**
* Creates a new JScrollBar object with a minimum of 0, a
* maximum of 100, a value of 0, an extent of 10 and the given
* orientation.
*
* @param orientation The orientation of the JScrollBar.
*/
public JScrollBar(int orientation)
{
this(orientation, 0, 10, 0, 100);
}
/**
* Creates a new JScrollBar object with the given orientation,
* value, min, max, and extent.
*
* @param orientation The orientation to use.
* @param value The value to use.
* @param extent The extent to use.
* @param min The minimum value of the scrollbar.
* @param max The maximum value of the scrollbar.
*/
public JScrollBar(int orientation, int value, int extent, int min, int max)
{
model = new DefaultBoundedRangeModel(value, extent, min, max);
if (orientation != SwingConstants.HORIZONTAL
&& orientation != SwingConstants.VERTICAL)
throw new IllegalArgumentException(orientation
+ " is not a legal orientation");
this.orientation = orientation;
changeListener = createChangeListener();
model.addChangeListener(changeListener);
updateUI();
}
/**
* This method sets the UI of this scrollbar to
* the given UI.
*
* @param ui The UI to use with this scrollbar.
*/
public void setUI(ScrollBarUI ui)
{
super.setUI(ui);
}
/**
* This method returns the UI that is being used
* with this scrollbar.
*
* @return The scrollbar's current UI.
*/
public ScrollBarUI getUI()
{
return (ScrollBarUI) ui;
}
/**
* This method changes the UI to be the
* default for the current look and feel.
*/
public void updateUI()
{
setUI((ScrollBarUI) UIManager.getUI(this));
invalidate();
repaint();
}
/**
* This method returns an identifier to
* choose the correct UI delegate for the
* scrollbar.
*
* @return The identifer to choose the UI delegate; "ScrollBarUI"
*/
public String getUIClassID()
{
return "ScrollBarUI";
}
/**
* This method returns the orientation of the scrollbar.
*
* @return The orientation of the scrollbar.
*/
public int getOrientation()
{
return orientation;
}
/**
* This method sets the orientation of the scrollbar.
*
* @param orientation The orientation of the scrollbar.
*/
public void setOrientation(int orientation)
{
if (orientation != SwingConstants.HORIZONTAL
&& orientation != SwingConstants.VERTICAL)
throw new IllegalArgumentException("orientation must be one of HORIZONTAL or VERTICAL");
if (orientation != this.orientation)
{
int oldOrientation = this.orientation;
this.orientation = orientation;
firePropertyChange(ORIENTATION_CHANGED_PROPERTY, oldOrientation,
this.orientation);
}
}
/**
* This method returns the model being used with
* the scrollbar.
*
* @return The scrollbar's model.
*/
public BoundedRangeModel getModel()
{
return model;
}
/**
* This method sets the model to use with
* the scrollbar.
*
* @param newModel The new model to use with the scrollbar.
*/
public void setModel(BoundedRangeModel newModel)
{
if (model != newModel)
{
BoundedRangeModel oldModel = model;
model = newModel;
oldModel.removeChangeListener(changeListener);
model.addChangeListener(changeListener);
firePropertyChange(MODEL_CHANGED_PROPERTY, oldModel, model);
}
}
/**
* This method returns how much the scrollbar's value
* should change for a unit increment depending on the
* given direction.
*
* @param direction The direction to scroll in.
*
* @return The amount the scrollbar's value will change given the direction.
*/
public int getUnitIncrement(int direction)
{
return direction * unitIncrement;
}
/**
* This method sets the unitIncrement property.
*
* @param unitIncrement The new unitIncrement.
*/
public void setUnitIncrement(int unitIncrement)
{
if (unitIncrement != this.unitIncrement)
{
int oldInc = this.unitIncrement;
this.unitIncrement = unitIncrement;
firePropertyChange(UNIT_INCREMENT_CHANGED_PROPERTY, oldInc,
this.unitIncrement);
}
}
/**
* The method returns how much the scrollbar's value
* should change for a block increment depending on
* the given direction.
*
* @param direction The direction to scroll in.
*
* @return The amount the scrollbar's value will change given the direction.
*/
public int getBlockIncrement(int direction)
{
return direction * blockIncrement;
}
/**
* This method sets the blockIncrement property.
*
* @param blockIncrement The new blockIncrement.
*/
public void setBlockIncrement(int blockIncrement)
{
if (blockIncrement != this.blockIncrement)
{
int oldInc = this.blockIncrement;
this.blockIncrement = blockIncrement;
firePropertyChange(BLOCK_INCREMENT_CHANGED_PROPERTY, oldInc,
this.blockIncrement);
}
}
/**
* This method returns the unitIncrement.
*
* @return The unitIncrement.
*/
public int getUnitIncrement()
{
return unitIncrement;
}
/**
* This method returns the blockIncrement.
*
* @return The blockIncrement.
*/
public int getBlockIncrement()
{
return blockIncrement;
}
/**
* This method returns the value of the scrollbar.
*
* @return The value of the scrollbar.
*/
public int getValue()
{
return model.getValue();
}
/**
* This method changes the value of the scrollbar.
*
* @param value The new value of the scrollbar.
*/
public void setValue(int value)
{
if (isEnabled() && value != getValue())
{
model.setValue(value);
fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
AdjustmentEvent.TRACK, value);
}
}
/**
* This method returns the visible amount (AKA extent).
* The visible amount can be used by UI delegates to
* determine the size of the thumb.
*
* @return The visible amount (AKA extent).
*/
public int getVisibleAmount()
{
return model.getExtent();
}
/**
* This method sets the visible amount (AKA extent).
*
* @param extent The visible amount (AKA extent).
*/
public void setVisibleAmount(int extent)
{
if (extent != getVisibleAmount())
{
model.setExtent(extent);
fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
AdjustmentEvent.TRACK, extent);
}
}
/**
* This method returns the minimum value of the scrollbar.
*
* @return The minimum value of the scrollbar.
*/
public int getMinimum()
{
return model.getMinimum();
}
/**
* This method sets the minimum value of the scrollbar.
*
* @param minimum The minimum value of the scrollbar.
*/
public void setMinimum(int minimum)
{
if (minimum != getMinimum())
{
model.setMinimum(minimum);
fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
AdjustmentEvent.TRACK, minimum);
}
}
/**
* This method returns the maximum value of the scrollbar.
*
* @return The maximum value of the scrollbar.
*/
public int getMaximum()
{
return model.getMaximum();
}
/**
* This method sets the maximum value of the scrollbar.
*
* @param maximum The maximum value of the scrollbar.
*/
public void setMaximum(int maximum)
{
if (maximum != getMaximum())
{
model.setMaximum(maximum);
fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
AdjustmentEvent.TRACK, maximum);
}
}
/**
* This method returns the model's isAjusting value.
*
* @return The model's isAdjusting value.
*/
public boolean getValueIsAdjusting()
{
return model.getValueIsAdjusting();
}
/**
* This method sets the model's isAdjusting value.
*
* @param b The new isAdjusting value.
*/
public void setValueIsAdjusting(boolean b)
{
model.setValueIsAdjusting(b);
}
/**
* This method sets the value, extent, minimum and
* maximum.
*
* @param newValue The new value.
* @param newExtent The new extent.
* @param newMin The new minimum.
* @param newMax The new maximum.
*/
public void setValue(int newValue, int newExtent, int newMin, int newMax)
{
if (!isEnabled())
newValue = model.getValue();
// It seems to be that on any change the value is fired.
if (newValue != getValue() || newExtent != getVisibleAmount() ||
newMin != getMinimum() || newMax != getMaximum())
{
model.setRangeProperties(newValue, newExtent, newMin, newMax,
model.getValueIsAdjusting());
fireAdjustmentValueChanged(AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
AdjustmentEvent.TRACK, newValue);
}
}
/**
* This method creates a new ChangeListener.
*
* @return A new ChangeListener.
*/
private ChangeListener createChangeListener()
{
return new ChangeListener()
{
public void stateChanged(ChangeEvent e)
{
fireStateChanged();
}
};
}
/**
* 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 scroll bar as the source.
*/
private void fireStateChanged()
{
Object[] changeListeners = listenerList.getListenerList();
if (changeEvent == null)
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);
}
}
/**
* This method adds a ChangeListener to the scroll bar.
*
* @param listener The listener to add.
*/
public void addChangeListener(ChangeListener listener)
{
listenerList.add(ChangeListener.class, listener);
}
/**
* This method removes a ChangeListener from the scroll bar.
*
* @param listener The listener to remove.
*/
public void removeChangeListener(ChangeListener listener)
{
listenerList.remove(ChangeListener.class, listener);
}
/**
* This method returns an array of all ChangeListeners listening to this
* scroll bar.
*
* @return An array of ChangeListeners listening to this scroll bar.
*/
public ChangeListener[] getChangeListeners()
{
return (ChangeListener[]) listenerList.getListeners(ChangeListener.class);
}
/**
* This method adds an AdjustmentListener to the scroll bar.
*
* @param listener The listener to add.
*/
public void addAdjustmentListener(AdjustmentListener listener)
{
listenerList.add(AdjustmentListener.class, listener);
}
/**
* This method removes an AdjustmentListener from the scroll bar.
*
* @param listener The listener to remove.
*/
public void removeAdjustmentListener(AdjustmentListener listener)
{
listenerList.remove(AdjustmentListener.class, listener);
}
/**
* This method returns an arry of all AdjustmentListeners listening to
* this scroll bar.
*
* @return An array of AdjustmentListeners listening to this scroll bar.
*/
public AdjustmentListener[] getAdjustmentListeners()
{
return (AdjustmentListener[]) listenerList.getListeners(AdjustmentListener.class);
}
/**
* This method is called to fired AdjustmentEvents to the listeners
* of this scroll bar. All AdjustmentEvents that are fired
* will have an ID of ADJUSTMENT_VALUE_CHANGED and a type of
* TRACK.
*
* @param id The ID of the adjustment event.
* @param type The Type of change.
* @param value The new value for the property that was changed..
*/
protected void fireAdjustmentValueChanged(int id, int type, int value)
{
Object[] adjustmentListeners = listenerList.getListenerList();
AdjustmentEvent adjustmentEvent = new AdjustmentEvent(this,
AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
AdjustmentEvent.TRACK,
value);
for (int i = adjustmentListeners.length - 2; i >= 0; i -= 2)
{
if (adjustmentListeners[i] == AdjustmentListener.class)
((AdjustmentListener) adjustmentListeners[i + 1]).adjustmentValueChanged(adjustmentEvent);
}
}
/**
* This method returns the minimum size for this scroll bar.
*
* @return The minimum size.
*/
public Dimension getMinimumSize()
{
return ui.getMinimumSize(this);
}
/**
* This method returns the maximum size for this scroll bar.
*
* @return The maximum size.
*/
public Dimension getMaximumSize()
{
return ui.getMaximumSize(this);
}
/**
* This method overrides the setEnabled in JComponent.
* When the scroll bar is disabled, the knob cannot
* be moved.
*
* @param x Whether the scrollbar is enabled.
*/
public void setEnabled(boolean x)
{
// nothing special needs to be done here since we
// just check the enabled setting before changing the value.
super.setEnabled(x);
}
/**
* A string that describes this JScrollBar. Normally only used
* for debugging.
*
* @return A string describing this JScrollBar.
*/
protected String paramString()
{
return "JScrollBar";
}
/**
* DOCUMENT ME!
*
* @return DOCUMENT ME!
*/
public AccessibleContext getAccessibleContext()
{
if (accessibleContext == null)
accessibleContext = new AccessibleJScrollBar(this);
return accessibleContext;
}
}