com.google.gwt.user.client.ui

## Class CustomScrollPanel

- java.lang.Object
- - com.google.gwt.user.client.ui.UIObject
  - - com.google.gwt.user.client.ui.Widget
    - - com.google.gwt.user.client.ui.Panel
      - - com.google.gwt.user.client.ui.SimplePanel
        - - com.google.gwt.user.client.ui.ScrollPanel
          - - com.google.gwt.user.client.ui.CustomScrollPanel

- All Implemented Interfaces:
    HasScrollHandlers, HasAttachHandlers, HasHandlers, EventListener, AcceptsOneWidget, HasHorizontalScrolling, HasOneWidget, HasScrolling, HasVerticalScrolling, HasVisibility, HasWidgets, HasWidgets.ForIsWidget, IsWidget, ProvidesResize, RequiresResize, SourcesScrollEvents, java.lang.Iterable<Widget>

      public class CustomScrollPanel
      extends ScrollPanel

  A custom version of the `ScrollPanel` that allows user provided scrollbars.

  The postion of scrollbars in a `CustomScrollPanel` differs from that of a native scrollable element. In a native element, scrollbars appear adjacent to the content, shrinking the content client height and width when they appear. `CustomScrollPanel` instead overlays scrollbars on top of the content, so the content does not change size when scrollbars appear. If the scrollbars obscures the content, you can set the `padding-top` and `padding-bottom` of the content to shift the content out from under the scrollbars.

  NOTE: Unlike `ScrollPanel`, which implements `RequiresResize` but doesn't really require it, `CustomScrollPanel` actually does require resize and should only be added to a panel that implements `ProvidesResize`, such as most layout panels and `ResizeLayoutPanel`.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `static interface` | `CustomScrollPanel.Resources` A ClientBundle of resources used by this widget.
    `static interface` | `CustomScrollPanel.Style` Styles used by this widget.

    - ### Nested classes/interfaces inherited from class com.google.gwt.user.client.ui.UIObject

      `UIObject.DebugIdImpl, UIObject.DebugIdImplEnabled`

    - ### Nested classes/interfaces inherited from interface com.google.gwt.user.client.ui.HasWidgets

      `HasWidgets.ForIsWidget`

  - ### Field Summary

    - ### Fields inherited from class com.google.gwt.user.client.ui.SimplePanel

      `widget`

    - ### Fields inherited from class com.google.gwt.user.client.ui.Widget

      `eventsToSink`

    - ### Fields inherited from class com.google.gwt.user.client.ui.UIObject

      `DEBUG_ID_PREFIX, MISSING_ELEMENT_ERROR, SETELEMENT_TWICE_ERROR`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `CustomScrollPanel()` Creates an empty `CustomScrollPanel`.
    `CustomScrollPanel(CustomScrollPanel.Resources resources)`
    `CustomScrollPanel(Widget child)` Creates a `CustomScrollPanel` with the specified child widget.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `doAttachChildren()` If a widget contains one or more child widgets that are not in the logical widget hierarchy (the child is physically connected only on the DOM level), it must override this method and call `Widget.onAttach()` for each of its child widgets.
    `protected void` | `doDetachChildren()` If a widget contains one or more child widgets that are not in the logical widget hierarchy (the child is physically connected only on the DOM level), it must override this method and call `Widget.onDetach()` for each of its child widgets.
    `HorizontalScrollbar` | `getHorizontalScrollbar()` Get the scrollbar used for horizontal scrolling.
    `VerticalScrollbar` | `getVerticalScrollbar()` Get the scrollbar used for vertical scrolling.
    `protected void` | `onAttach()` This method is called when a widget is attached to the browser's document.
    `void` | `onBrowserEvent(Event event)` Fired whenever a browser event is received.
    `protected void` | `onDetach()` This method is called when a widget is detached from the browser's document.
    `protected void` | `onLoad()` This method is called immediately after a widget becomes attached to the browser's document.
    `void` | `onResize()` This method must be called whenever the implementor's size has been modified.
    `boolean` | `remove(Widget w)` Removes a child widget.
    `void` | `removeHorizontalScrollbar()` Remove the `HorizontalScrollbar`, if one exists.
    `void` | `removeVerticalScrollbar()` Remove the `VerticalScrollbar`, if one exists.
    `void` | `setAlwaysShowScrollBars(boolean alwaysShow)` Sets whether this panel always shows its scroll bars, or only when necessary.
    `void` | `setHorizontalScrollbar(HorizontalScrollbar scrollbar, int height)` Set the scrollbar used for horizontal scrolling.
    `void` | `setVerticalScrollbar(VerticalScrollbar scrollbar, int width)` Set the scrollbar used for vertical scrolling.
    `void` | `setWidget(Widget w)` Sets this panel's widget.

    - ### Methods inherited from class com.google.gwt.user.client.ui.ScrollPanel

      `addScrollHandler, addScrollListener, ensureVisible, getContainerElement, getHorizontalScrollPosition, getMaximumHorizontalScrollPosition, getMaximumVerticalScrollPosition, getMinimumHorizontalScrollPosition, getMinimumVerticalScrollPosition, getScrollableElement, getScrollPosition, getVerticalScrollPosition, isTouchScrollingDisabled, removeScrollListener, scrollToBottom, scrollToLeft, scrollToRight, scrollToTop, setHeight, setHorizontalScrollPosition, setScrollPosition, setSize, setTouchScrollingDisabled, setVerticalScrollPosition, setWidth`

    - ### Methods inherited from class com.google.gwt.user.client.ui.SimplePanel

      `add, getWidget, iterator, setWidget`

    - ### Methods inherited from class com.google.gwt.user.client.ui.Panel

      `add, adopt, clear, orphan, remove`

    - ### Methods inherited from class com.google.gwt.user.client.ui.Widget

      `addAttachHandler, addBitlessDomHandler, addDomHandler, addHandler, asWidget, asWidgetOrNull, createHandlerManager, delegateEvent, ensureHandlers, fireEvent, getHandlerCount, getHandlerManager, getLayoutData, getParent, isAttached, isOrWasAttached, onUnload, removeFromParent, replaceElement, setLayoutData, setParent, sinkEvents, unsinkEvents`

    - ### Methods inherited from class com.google.gwt.user.client.ui.UIObject

      `addStyleDependentName, addStyleName, ensureDebugId, ensureDebugId, ensureDebugId, getAbsoluteLeft, getAbsoluteTop, getElement, getOffsetHeight, getOffsetWidth, getStyleElement, getStyleName, getStyleName, getStylePrimaryName, getStylePrimaryName, getTitle, isVisible, isVisible, onEnsureDebugId, removeStyleDependentName, removeStyleName, resolvePotentialElement, setElement, setElement, setPixelSize, setStyleDependentName, setStyleName, setStyleName, setStyleName, setStyleName, setStylePrimaryName, setStylePrimaryName, setTitle, setVisible, setVisible, sinkBitlessEvent, toString`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

    - ### Methods inherited from interface com.google.gwt.event.shared.HasHandlers

      `fireEvent`

    - ### Methods inherited from interface com.google.gwt.user.client.ui.IsWidget

      `asWidget`

    - ### Methods inherited from interface java.lang.Iterable

      `forEach, spliterator`

- - ### Constructor Detail

    - #### CustomScrollPanel

          public CustomScrollPanel()

      Creates an empty `CustomScrollPanel`.

    - #### CustomScrollPanel

          public CustomScrollPanel(CustomScrollPanel.Resources resources)

    - #### CustomScrollPanel

          public CustomScrollPanel(Widget child)

      Creates a `CustomScrollPanel` with the specified child widget.
      Parameters:
        `child` - the widget to be wrapped by the scroll panel

  - ### Method Detail

    - #### getHorizontalScrollbar

          public HorizontalScrollbar getHorizontalScrollbar()

      Get the scrollbar used for horizontal scrolling.
      Returns:
        the horizontal scrollbar, or null if none specified

    - #### getVerticalScrollbar

          public VerticalScrollbar getVerticalScrollbar()

      Get the scrollbar used for vertical scrolling.
      Returns:
        the vertical scrollbar, or null if none specified

    - #### onBrowserEvent

          public void onBrowserEvent(Event event)

      Description copied from interface: `EventListener`
      Fired whenever a browser event is received.
      Specified by:
        `onBrowserEvent` in interface `EventListener`
      Overrides:
        `onBrowserEvent` in class `Widget`
      Parameters:
        `event` - the event received

    - #### onResize

          public void onResize()

      Description copied from interface: `RequiresResize`
      This method must be called whenever the implementor's size has been modified.
      Specified by:
        `onResize` in interface `RequiresResize`
      Overrides:
        `onResize` in class `ScrollPanel`

    - #### remove

          public boolean remove(Widget w)

      Description copied from class: `Panel`
      Removes a child widget.

      How to Override this Method

      There are several important things that must take place in the correct order to properly remove a Widget from a Panel. Not all of these steps will be relevant to every Panel, but all of the steps must be considered.

      1. Validate: Make sure this Panel is actually the parent of the child Widget; return `false` if it is not.
      2. Orphan: Call `Panel.orphan(Widget)` first while the child Widget is still attached.
      3. Physical Detach: Adjust the DOM to account for the removal of the child Widget. The Widget's Element must be physically removed from the DOM.
      4. Logical Detach: Update the Panel's state variables to reflect the removal of the child Widget. Example: the Widget is removed from the Panel's `WidgetCollection`.
      Specified by:
        `remove` in interface `HasWidgets`
      Overrides:
        `remove` in class `SimplePanel`
      Parameters:
        `w` - the widget to be removed
      Returns:
        `true` if the child was present

    - #### removeHorizontalScrollbar

          public void removeHorizontalScrollbar()

      Remove the `HorizontalScrollbar`, if one exists.

    - #### removeVerticalScrollbar

          public void removeVerticalScrollbar()

      Remove the `VerticalScrollbar`, if one exists.

    - #### setAlwaysShowScrollBars

          public void setAlwaysShowScrollBars(boolean alwaysShow)

      Description copied from class: `ScrollPanel`
      Sets whether this panel always shows its scroll bars, or only when necessary.
      Overrides:
        `setAlwaysShowScrollBars` in class `ScrollPanel`
      Parameters:
        `alwaysShow` - `true` to show scroll bars at all times

    - #### setHorizontalScrollbar

          public void setHorizontalScrollbar(HorizontalScrollbar scrollbar,
                                             int height)

      Set the scrollbar used for horizontal scrolling.
      Parameters:
        `scrollbar` - the scrollbar, or null to clear it
        `height` - the height of the scrollbar in pixels

    - #### setVerticalScrollbar

          public void setVerticalScrollbar(VerticalScrollbar scrollbar,
                                           int width)

      Set the scrollbar used for vertical scrolling.
      Parameters:
        `scrollbar` - the scrollbar, or null to clear it
        `width` - the width of the scrollbar in pixels

    - #### setWidget

          public void setWidget(Widget w)

      Description copied from class: `SimplePanel`
      Sets this panel's widget. Any existing child widget will be removed.
      Specified by:
        `setWidget` in interface `HasOneWidget`
      Overrides:
        `setWidget` in class `SimplePanel`
      Parameters:
        `w` - the panel's new widget, or `null` to clear the panel

    - #### doAttachChildren

          protected void doAttachChildren()

      Description copied from class: `Widget`
      If a widget contains one or more child widgets that are not in the logical widget hierarchy (the child is physically connected only on the DOM level), it must override this method and call `Widget.onAttach()` for each of its child widgets.
      Overrides:
        `doAttachChildren` in class `Panel`
      See Also:
        `Widget.onAttach()`

    - #### doDetachChildren

          protected void doDetachChildren()

      Description copied from class: `Widget`
      If a widget contains one or more child widgets that are not in the logical widget hierarchy (the child is physically connected only on the DOM level), it must override this method and call `Widget.onDetach()` for each of its child widgets.
      Overrides:
        `doDetachChildren` in class `Panel`
      See Also:
        `Widget.onDetach()`

    - #### onAttach

          protected void onAttach()

      Description copied from class: `Widget`

      This method is called when a widget is attached to the browser's document. To receive notification after a Widget has been added to the document, override the `Widget.onLoad()` method or use `Widget.addAttachHandler(com.google.gwt.event.logical.shared.AttachEvent.Handler)`.

      It is strongly recommended that you override `Widget.onLoad()` or `Widget.doAttachChildren()` instead of this method to avoid inconsistencies between logical and physical attachment states.

      Subclasses that override this method must call `super.onAttach()` to ensure that the Widget has been attached to its underlying Element.

      Overrides:
        `onAttach` in class `ScrollPanel`
      See Also:
        `Widget.onLoad()`, `Widget.doAttachChildren()`

    - #### onDetach

          protected void onDetach()

      Description copied from class: `Widget`

      This method is called when a widget is detached from the browser's document. To receive notification before a Widget is removed from the document, override the `Widget.onUnload()` method or use `Widget.addAttachHandler(com.google.gwt.event.logical.shared.AttachEvent.Handler)`.

      It is strongly recommended that you override `Widget.onUnload()` or `Widget.doDetachChildren()` instead of this method to avoid inconsistencies between logical and physical attachment states.

      Subclasses that override this method must call `super.onDetach()` to ensure that the Widget has been detached from the underlying Element. Failure to do so will result in application memory leaks due to circular references between DOM Elements and JavaScript objects.

      Overrides:
        `onDetach` in class `ScrollPanel`
      See Also:
        `Widget.onUnload()`, `Widget.doDetachChildren()`

    - #### onLoad

          protected void onLoad()

      Description copied from class: `Widget`
      This method is called immediately after a widget becomes attached to the browser's document.
      Overrides:
        `onLoad` in class `Widget`