mirror of git://gcc.gnu.org/git/gcc.git
				
				
				
			
		
			
				
	
	
		
			681 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Java
		
	
	
	
			
		
		
	
	
			681 lines
		
	
	
		
			18 KiB
		
	
	
	
		
			Java
		
	
	
	
| /* ScrollPane.java -- Scrolling window
 | |
|    Copyright (C) 1999, 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., 51 Franklin Street, Fifth Floor, Boston, MA
 | |
| 02110-1301 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 java.awt;
 | |
| 
 | |
| import java.awt.event.MouseEvent;
 | |
| import java.awt.peer.ComponentPeer;
 | |
| import java.awt.peer.ScrollPanePeer;
 | |
| 
 | |
| import javax.accessibility.Accessible;
 | |
| import javax.accessibility.AccessibleContext;
 | |
| import javax.accessibility.AccessibleRole;
 | |
| 
 | |
| 
 | |
| /**
 | |
|   * This widget provides a scrollable region that allows a single
 | |
|   * subcomponent to be viewed through a smaller window.
 | |
|   *
 | |
|   * @author Aaron M. Renn (arenn@urbanophile.com)
 | |
|   */
 | |
| public class ScrollPane extends Container implements Accessible
 | |
| {
 | |
| 
 | |
| /*
 | |
|  * Static Variables
 | |
|  */
 | |
| 
 | |
| /**
 | |
|   * Constant indicating that scrollbars are created as needed in this
 | |
|   * windows.
 | |
|   */
 | |
| public static final int SCROLLBARS_AS_NEEDED = 0;
 | |
| 
 | |
| /**
 | |
|   * Constant indicating that scrollbars are always displayed in this
 | |
|   * window.
 | |
|   */
 | |
| public static final int SCROLLBARS_ALWAYS = 1;
 | |
| 
 | |
| /**
 | |
|   * Constant indicating that scrollbars are never displayed in this window.
 | |
|   */
 | |
| public static final int SCROLLBARS_NEVER = 2;
 | |
| 
 | |
| /**
 | |
|  * The number used to generate the name returned by getName.
 | |
|  */
 | |
| private static transient long next_scrollpane_number;
 | |
| 
 | |
| // Serialization constant
 | |
| private static final long serialVersionUID = 7956609840827222915L;
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /*
 | |
|  * Instance Variables
 | |
|  */
 | |
| 
 | |
| /**
 | |
|   * @serial The horizontal scrollbar for this window.  The methods
 | |
|   * <code>setMinimum()</code>, <code>setMaximum</code>, and
 | |
|   * <code>setVisibleAmount</code> must not be called on this scrollbar.
 | |
|   */
 | |
| private ScrollPaneAdjustable hAdjustable;
 | |
| 
 | |
| /**
 | |
|   * @serial The vertical scrollbar for this window.  The methods
 | |
|   * <code>setMinimum()</code>, <code>setMaximum</code>, and
 | |
|   * <code>setVisibleAmount</code> must not be called on this scrollbar.
 | |
|   */
 | |
| private ScrollPaneAdjustable vAdjustable;
 | |
| 
 | |
| /**
 | |
|   * @serial Indicates when scrollbars are displayed in this window, will
 | |
|   * be one of the constants from this class.
 | |
|   */
 | |
| private int scrollbarDisplayPolicy;
 | |
| 
 | |
| // Current scroll position
 | |
| private Point scrollPosition = new Point(0, 0);
 | |
| 
 | |
| private boolean wheelScrollingEnabled;
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /*
 | |
|  * Constructors
 | |
|  */
 | |
| 
 | |
| /**
 | |
|   * Initializes a new instance of <code>ScrollPane</code> with a default
 | |
|   * scrollbar policy of <code>SCROLLBARS_AS_NEEDED</code>.
 | |
|   *
 | |
|   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
 | |
|   */
 | |
| public
 | |
| ScrollPane()
 | |
| {
 | |
|   this(SCROLLBARS_AS_NEEDED);
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Initializes a new instance of <code>ScrollPane</code> with the
 | |
|   * specified scrollbar policy.
 | |
|   *
 | |
|   * @param scrollbarDisplayPolicy When to display scrollbars, which must
 | |
|   * be one of the constants defined in this class.
 | |
|   *
 | |
|   * @exception HeadlessException If GraphicsEnvironment.isHeadless() is true.
 | |
|   */
 | |
| public
 | |
| ScrollPane(int scrollbarDisplayPolicy)
 | |
| {
 | |
|   if (GraphicsEnvironment.isHeadless ())
 | |
|     throw new HeadlessException ();
 | |
| 
 | |
|   this.scrollbarDisplayPolicy = scrollbarDisplayPolicy;
 | |
| 
 | |
|   if (scrollbarDisplayPolicy != SCROLLBARS_ALWAYS
 | |
|       && scrollbarDisplayPolicy != SCROLLBARS_AS_NEEDED
 | |
|       && scrollbarDisplayPolicy != SCROLLBARS_NEVER)
 | |
|     throw new IllegalArgumentException("Bad scrollbarDisplayPolicy: " +
 | |
|                                        scrollbarDisplayPolicy);
 | |
| 
 | |
|   if (scrollbarDisplayPolicy != SCROLLBARS_NEVER)
 | |
|     {
 | |
|       hAdjustable = new ScrollPaneAdjustable (this, Scrollbar.HORIZONTAL);
 | |
|       vAdjustable = new ScrollPaneAdjustable (this, Scrollbar.VERTICAL);
 | |
|     }
 | |
| 
 | |
|   wheelScrollingEnabled = true;
 | |
| 
 | |
|   // Default size.
 | |
|   setSize(100,100);
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /*
 | |
|  * Instance Variables
 | |
|  */
 | |
| 
 | |
| /**
 | |
|   * Returns the current scrollbar display policy.
 | |
|   *
 | |
|   * @return The current scrollbar display policy.
 | |
|   */
 | |
| public int
 | |
| getScrollbarDisplayPolicy()
 | |
| {
 | |
|   return(scrollbarDisplayPolicy);
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Returns the horizontal scrollbar for this object.  If the scrollbar
 | |
|   * display policy is set to <code>SCROLLBARS_NEVER</code> then this
 | |
|   * will be <code>null</code>.
 | |
|   *
 | |
|   * @return The horizontal scrollbar for this window.
 | |
|   */
 | |
| public Adjustable
 | |
| getHAdjustable()
 | |
| {
 | |
|   return(hAdjustable);
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Returns the vertical scrollbar for this object.  If the scrollbar
 | |
|   * display policy is set to <code>SCROLLBARS_NEVER</code> then this
 | |
|   * will be <code>null</code>.
 | |
|   *
 | |
|   * @return The horizontal scrollbar for this window.
 | |
|   */
 | |
| public Adjustable
 | |
| getVAdjustable()
 | |
| {
 | |
|   return(vAdjustable);
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Returns the current viewport size.  The viewport is the region of
 | |
|   * this object's window where the child is actually displayed.
 | |
|   *
 | |
|   * @return The viewport size.
 | |
|   */
 | |
| public Dimension getViewportSize ()
 | |
| {
 | |
|   Dimension viewsize = getSize ();
 | |
|   Insets insets = getInsets ();
 | |
| 
 | |
|   viewsize.width -= (insets.left + insets.right);
 | |
|   viewsize.height -= (insets.top + insets.bottom);
 | |
| 
 | |
|   Component[] list = getComponents();
 | |
|   if ((list == null) || (list.length <= 0))
 | |
|     return viewsize;
 | |
| 
 | |
|   Dimension dim = list[0].getPreferredSize();
 | |
| 
 | |
|   if (dim.width <= 0 && dim.height <= 0)
 | |
|     return viewsize;
 | |
| 
 | |
|   int vScrollbarWidth = getVScrollbarWidth ();
 | |
|   int hScrollbarHeight = getHScrollbarHeight ();
 | |
| 
 | |
|   if (scrollbarDisplayPolicy == SCROLLBARS_ALWAYS)
 | |
|     {
 | |
|       viewsize.width -= vScrollbarWidth;
 | |
|       viewsize.height -= hScrollbarHeight;
 | |
|       return viewsize;
 | |
|     }
 | |
| 
 | |
|   if (scrollbarDisplayPolicy == SCROLLBARS_NEVER)
 | |
|     return viewsize;
 | |
| 
 | |
|   // The scroll policy is SCROLLBARS_AS_NEEDED, so we need to see if
 | |
|   // either scrollbar is needed.
 | |
| 
 | |
|   // Assume we don't need either scrollbar.
 | |
|   boolean mayNeedVertical = false;
 | |
|   boolean mayNeedHorizontal = false;
 | |
| 
 | |
|   boolean needVertical = false;
 | |
|   boolean needHorizontal = false;
 | |
| 
 | |
|   // Check if we need vertical scrollbars.  If we do, then we need to
 | |
|   // subtract the width of the vertical scrollbar from the viewport's
 | |
|   // width.
 | |
|   if (dim.height > viewsize.height)
 | |
|     needVertical = true;
 | |
|   else if (dim.height > (viewsize.height - hScrollbarHeight))
 | |
|     // This is tricky.  In this case the child is tall enough that its
 | |
|     // bottom edge would be covered by a horizontal scrollbar, if one
 | |
|     // were present.  This means that if there's a horizontal
 | |
|     // scrollbar then we need a vertical scrollbar.
 | |
|     mayNeedVertical = true;
 | |
| 
 | |
|   if (dim.width > viewsize.width)
 | |
|     needHorizontal = true;
 | |
|   else if (dim.width > (viewsize.width - vScrollbarWidth))
 | |
|     mayNeedHorizontal = true;
 | |
| 
 | |
|   if (needVertical && mayNeedHorizontal)
 | |
|     needHorizontal = true;
 | |
| 
 | |
|   if (needHorizontal && mayNeedVertical)
 | |
|     needVertical = true;
 | |
| 
 | |
|   if (needHorizontal)
 | |
|     viewsize.height -= hScrollbarHeight;
 | |
| 
 | |
|   if (needVertical)
 | |
|     viewsize.width -= vScrollbarWidth;
 | |
| 
 | |
|   return viewsize;
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Returns the height of a horizontal scrollbar.
 | |
|   *
 | |
|   * @return The height of a horizontal scrollbar.
 | |
|   */
 | |
| public int
 | |
| getHScrollbarHeight()
 | |
| {
 | |
|   ScrollPanePeer spp = (ScrollPanePeer)getPeer();
 | |
|   if (spp != null)
 | |
|     return(spp.getHScrollbarHeight());
 | |
|   else
 | |
|     return(0); // FIXME: What to do here?
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Returns the width of a vertical scrollbar.
 | |
|   *
 | |
|   * @return The width of a vertical scrollbar.
 | |
|   */
 | |
| public int
 | |
| getVScrollbarWidth()
 | |
| {
 | |
|   ScrollPanePeer spp = (ScrollPanePeer)getPeer();
 | |
|   if (spp != null)
 | |
|     return(spp.getVScrollbarWidth());
 | |
|   else
 | |
|     return(0); // FIXME: What to do here?
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Returns the current scroll position of the viewport.
 | |
|   *
 | |
|   * @return The current scroll position of the viewport.
 | |
|   *
 | |
|   * @throws NullPointerException if the scrollpane does have a child.
 | |
|   */
 | |
| public Point
 | |
| getScrollPosition()
 | |
| {
 | |
|   if (getComponentCount() == 0)
 | |
|     throw new NullPointerException();
 | |
| 
 | |
|   int x = 0;
 | |
|   int y = 0;
 | |
| 
 | |
|   Adjustable v = getVAdjustable();
 | |
|   Adjustable h = getHAdjustable();
 | |
| 
 | |
|   if (v != null)
 | |
|     y = v.getValue();
 | |
|   if (h != null)
 | |
|     x = h.getValue();
 | |
| 
 | |
|   return(new Point(x, y));
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Sets the scroll position to the specified value.
 | |
|   *
 | |
|   * @param scrollPosition The new scrollPosition.
 | |
|   *
 | |
|   * @exception IllegalArgumentException If the specified value is outside
 | |
|   * the legal scrolling range.
 | |
|   */
 | |
| public void
 | |
| setScrollPosition(Point scrollPosition) throws IllegalArgumentException
 | |
| {
 | |
|   setScrollPosition(scrollPosition.x, scrollPosition.y);
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Sets the scroll position to the specified value.
 | |
|   *
 | |
|   * @param x The new X coordinate of the scroll position.
 | |
|   * @param y The new Y coordinate of the scroll position.
 | |
|   *
 | |
|   * @throws NullPointerException if scrollpane does not have a child.
 | |
|   *
 | |
|   * @exception IllegalArgumentException If the specified value is outside
 | |
|   * the legal scrolling range.
 | |
|   */
 | |
| public void
 | |
| setScrollPosition(int x, int y)
 | |
| {
 | |
|   if (getComponentCount() == 0)
 | |
|     throw new NullPointerException("child is null");
 | |
| 
 | |
|   if (x > (int) (getComponent(0).getWidth() - getViewportSize().getWidth()))
 | |
|     x = (int) (getComponent(0).getWidth() - getViewportSize().getWidth());
 | |
|   if (y > (int) (getComponent(0).getHeight() - getViewportSize().getHeight()))
 | |
|     y = (int) (getComponent(0).getHeight() - getViewportSize().getHeight());
 | |
| 
 | |
|   if (x < 0)
 | |
|     x = 0;
 | |
|   if (y < 0)
 | |
|     y = 0;
 | |
| 
 | |
|   Adjustable h = getHAdjustable();
 | |
|   Adjustable v = getVAdjustable();
 | |
| 
 | |
|   if (h != null)
 | |
|     h.setValue(x);
 | |
|   if (v != null)
 | |
|     v.setValue(y);
 | |
| 
 | |
|   ScrollPanePeer spp = (ScrollPanePeer)getPeer();
 | |
|   if (spp != null)
 | |
|     spp.setScrollPosition(x, y);
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Notifies this object that it should create its native peer.
 | |
|   */
 | |
| public void
 | |
| addNotify()
 | |
| {
 | |
|   if (peer != null)
 | |
|     return;
 | |
| 
 | |
|   setPeer((ComponentPeer)getToolkit().createScrollPane(this));
 | |
|   super.addNotify();
 | |
| 
 | |
|   Component[] list = getComponents();
 | |
|   if (list != null && list.length > 0 && list[0].isLightweight())
 | |
|   {
 | |
|     Panel panel = new Panel();
 | |
|     panel.setLayout(new BorderLayout());
 | |
|     panel.add(list[0], BorderLayout.CENTER);
 | |
|     add(panel);
 | |
|   }
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Notifies this object that it should destroy its native peers.
 | |
|   */
 | |
| public void
 | |
| removeNotify()
 | |
| {
 | |
|   super.removeNotify();
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Adds the specified child component to this container.  A
 | |
|   * <code>ScrollPane</code> can have at most one child, so if a second
 | |
|   * one is added, then first one is removed.
 | |
|   *
 | |
|   * @param component The component to add to this container.
 | |
|   * @param constraints A list of layout constraints for this object.
 | |
|   * @param index The index at which to add the child, which is ignored
 | |
|   * in this implementation.
 | |
|   */
 | |
|   protected final void addImpl (Component component, Object constraints,
 | |
|                                 int index)
 | |
| {
 | |
|   Component[] list = getComponents();
 | |
|   if ((list != null) && (list.length > 0))
 | |
|     remove(list[0]);
 | |
| 
 | |
|   super.addImpl(component, constraints, index);
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Lays out this component.  This consists of resizing the sole child
 | |
|   * component to its perferred size.
 | |
|   */
 | |
| public void
 | |
| doLayout()
 | |
| {
 | |
|   layout ();
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Lays out this component.  This consists of resizing the sole child
 | |
|   * component to its perferred size.
 | |
|   *
 | |
|   * @deprecated This method is deprecated in favor of
 | |
|   * <code>doLayout()</code>.
 | |
|   */
 | |
| public void
 | |
| layout()
 | |
| {
 | |
|   Component[] list = getComponents ();
 | |
|   if ((list != null) && (list.length > 0))
 | |
|     {
 | |
|       Dimension dim = list[0].getPreferredSize ();
 | |
|       Dimension vp = getViewportSize ();
 | |
| 
 | |
|       if (dim.width < vp.width)
 | |
|         dim.width = vp.width;
 | |
| 
 | |
|       if (dim.height < vp.height)
 | |
|         dim.height = vp.height;
 | |
| 
 | |
|       ScrollPanePeer peer = (ScrollPanePeer) getPeer ();
 | |
|       if (peer != null)
 | |
|         peer.childResized (dim.width, dim.height);
 | |
| 
 | |
|       list[0].setSize (dim);
 | |
| 
 | |
|       Point p = getScrollPosition ();
 | |
|       if (p.x > dim.width)
 | |
|         p.x = dim.width;
 | |
|       if (p.y > dim.height)
 | |
|         p.y = dim.height;
 | |
| 
 | |
|       setScrollPosition (p);
 | |
| 
 | |
|       list[0].setLocation(new Point());
 | |
|     }
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * This method overrides its superclass method to ensure no layout
 | |
|   * manager is set for this container.  <code>ScrollPane</code>'s do
 | |
|   * not have layout managers.
 | |
|   *
 | |
|   * @param layoutManager Ignored
 | |
|   * @throws AWTError Always throws this error when called.
 | |
|   */
 | |
| public final void
 | |
| setLayout(LayoutManager layoutManager)
 | |
| {
 | |
|   throw new AWTError("ScrollPane controls layout");
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Prints all of the components in this container.
 | |
|   *
 | |
|   * @param graphics The desired graphics context for printing.
 | |
|   */
 | |
| public void
 | |
| printComponents(Graphics graphics)
 | |
| {
 | |
|   super.printComponents(graphics);
 | |
| }
 | |
| 
 | |
| /*************************************************************************/
 | |
| 
 | |
| /**
 | |
|   * Returns a debug string for this object.
 | |
|   *
 | |
|   * @return A debug string for this object.
 | |
|   */
 | |
| public String
 | |
| paramString()
 | |
| {
 | |
|   Insets insets = getInsets();
 | |
|   return getName() + ","
 | |
|          + getX() + ","
 | |
|          + getY() + ","
 | |
|          + getWidth() + "x" + getHeight() + ","
 | |
|          + getIsValidString() + ","
 | |
|          + "ScrollPosition=(" + scrollPosition.x + ","
 | |
|                               + scrollPosition.y + "),"
 | |
|          + "Insets=(" + insets.top + ","
 | |
|                       + insets.left + ","
 | |
|                       + insets.bottom + ","
 | |
|                       + insets.right + "),"
 | |
|          + "ScrollbarDisplayPolicy=" + getScrollbarDisplayPolicyString() + ","
 | |
|          + "wheelScrollingEnabled=" + isWheelScrollingEnabled();
 | |
| }
 | |
| 
 | |
| private String
 | |
| getScrollbarDisplayPolicyString()
 | |
| {
 | |
|   if (getScrollbarDisplayPolicy() == 0)
 | |
|     return "as-needed";
 | |
|   else if (getScrollbarDisplayPolicy() == 1)
 | |
|     return "always";
 | |
|   else
 | |
|     return "never";
 | |
| }
 | |
| 
 | |
| private String
 | |
| getIsValidString()
 | |
| {
 | |
|   if (isValid())
 | |
|     return "valid";
 | |
|   else
 | |
|     return "invalid";
 | |
| }
 | |
| 
 | |
|   /**
 | |
|    * Tells whether or not an event is enabled.
 | |
|    *
 | |
|    * @since 1.4
 | |
|    */
 | |
|   protected boolean eventTypeEnabled (int type)
 | |
|   {
 | |
|     if (type == MouseEvent.MOUSE_WHEEL)
 | |
|       return wheelScrollingEnabled;
 | |
| 
 | |
|     return super.eventTypeEnabled (type);
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Tells whether or not wheel scrolling is enabled.
 | |
|    *
 | |
|    * @since 1.4
 | |
|    */
 | |
|   public boolean isWheelScrollingEnabled ()
 | |
|   {
 | |
|     return wheelScrollingEnabled;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Enables/disables wheel scrolling.
 | |
|    *
 | |
|    * @since 1.4
 | |
|    */
 | |
|   public void setWheelScrollingEnabled (boolean enable)
 | |
|   {
 | |
|     wheelScrollingEnabled = enable;
 | |
|   }
 | |
| 
 | |
|   protected class AccessibleAWTScrollPane extends AccessibleAWTContainer
 | |
|   {
 | |
|     private static final long serialVersionUID = 6100703663886637L;
 | |
| 
 | |
|     public AccessibleRole getAccessibleRole()
 | |
|     {
 | |
|       return AccessibleRole.SCROLL_PANE;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Gets the AccessibleContext associated with this <code>ScrollPane</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 AccessibleAWTScrollPane();
 | |
|     return accessibleContext;
 | |
|   }
 | |
| 
 | |
|   /**
 | |
|    * Generate a unique name for this <code>ScrollPane</code>.
 | |
|    *
 | |
|    * @return A unique name for this <code>ScrollPane</code>.
 | |
|    */
 | |
|   String generateName()
 | |
|   {
 | |
|     return "scrollpane" + getUniqueLong();
 | |
|   }
 | |
| 
 | |
|   private static synchronized long getUniqueLong()
 | |
|   {
 | |
|     return next_scrollpane_number++;
 | |
|   }
 | |
| 
 | |
| } // class ScrollPane
 |