Module java.desktop
Package javax.swing.plaf.basic

## Class BasicScrollPaneUI

- java.lang.Object
- - javax.swing.plaf.ComponentUI
  - - javax.swing.plaf.ScrollPaneUI
    - - javax.swing.plaf.basic.BasicScrollPaneUI

- All Implemented Interfaces:
    `ScrollPaneConstants`
  Direct Known Subclasses:
    `MetalScrollPaneUI`, `SynthScrollPaneUI`

      public class BasicScrollPaneUI
      extends ScrollPaneUI
      implements ScrollPaneConstants

  A default L&F implementation of ScrollPaneUI.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `BasicScrollPaneUI.HSBChangeListener` | Horizontal scrollbar listener.
    `protected class` | `BasicScrollPaneUI.MouseWheelHandler` | MouseWheelHandler is an inner class which implements the MouseWheelListener interface.
    `class` | `BasicScrollPaneUI.PropertyChangeHandler` | Property change handler.
    `class` | `BasicScrollPaneUI.ViewportChangeHandler` | Listener for viewport events.
    `class` | `BasicScrollPaneUI.VSBChangeListener` | Vertical scrollbar listener.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected ChangeListener` | `hsbChangeListener` | `ChangeListener` installed on the horizontal scrollbar.
    `protected JScrollPane` | `scrollpane` | The instance of `JScrollPane`.
    `protected PropertyChangeListener` | `spPropertyChangeListener` | `PropertyChangeListener` installed on the scroll pane.
    `protected ChangeListener` | `viewportChangeListener` | `ChangeListener` installed on the viewport.
    `protected ChangeListener` | `vsbChangeListener` | `ChangeListener` installed on the vertical scrollbar.

    - ### Fields inherited from interface javax.swing.ScrollPaneConstants

      `COLUMN_HEADER, HORIZONTAL_SCROLLBAR, HORIZONTAL_SCROLLBAR_ALWAYS, HORIZONTAL_SCROLLBAR_AS_NEEDED, HORIZONTAL_SCROLLBAR_NEVER, HORIZONTAL_SCROLLBAR_POLICY, LOWER_LEADING_CORNER, LOWER_LEFT_CORNER, LOWER_RIGHT_CORNER, LOWER_TRAILING_CORNER, ROW_HEADER, UPPER_LEADING_CORNER, UPPER_LEFT_CORNER, UPPER_RIGHT_CORNER, UPPER_TRAILING_CORNER, VERTICAL_SCROLLBAR, VERTICAL_SCROLLBAR_ALWAYS, VERTICAL_SCROLLBAR_AS_NEEDED, VERTICAL_SCROLLBAR_NEVER, VERTICAL_SCROLLBAR_POLICY, VIEWPORT`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `BasicScrollPaneUI​()` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected ChangeListener` | `createHSBChangeListener​()` | Returns an instance of horizontal scroll bar `ChangeListener`.
    `protected MouseWheelListener` | `createMouseWheelListener​()` | Creates an instance of MouseWheelListener, which is added to the JScrollPane by installUI().
    `protected PropertyChangeListener` | `createPropertyChangeListener​()` | Creates an instance of `PropertyChangeListener` that's added to the `JScrollPane` by `installUI()`.
    `static ComponentUI` | `createUI​(JComponent x)` | Returns a new instance of `BasicScrollPaneUI`.
    `protected ChangeListener` | `createViewportChangeListener​()` | Returns an instance of viewport `ChangeListener`.
    `protected ChangeListener` | `createVSBChangeListener​()` | Returns an instance of vertical scroll bar `ChangeListener`.
    `int` | `getBaseline​(JComponent c, int width, int height)` | Returns the baseline.
    `Component.BaselineResizeBehavior` | `getBaselineResizeBehavior​(JComponent c)` | Returns an enum indicating how the baseline of the component changes as the size changes.
    `Dimension` | `getMaximumSize​(JComponent c)` | Returns the specified component's maximum size appropriate for the look and feel.
    `protected void` | `installDefaults​(JScrollPane scrollpane)` | Installs default properties.
    `protected void` | `installKeyboardActions​(JScrollPane c)` | Registers keyboard actions.
    `protected void` | `installListeners​(JScrollPane c)` | Registers listeners.
    `void` | `installUI​(JComponent x)` | Configures the specified component appropriately for the look and feel.
    `void` | `paint​(Graphics g, JComponent c)` | Paints the specified component appropriately for the look and feel.
    `protected void` | `syncScrollPaneWithViewport​()` | Synchronizes the `JScrollPane` with `Viewport`.
    `protected void` | `uninstallDefaults​(JScrollPane c)` | Uninstalls default properties.
    `protected void` | `uninstallKeyboardActions​(JScrollPane c)` | Unregisters keyboard actions.
    `protected void` | `uninstallListeners​(JComponent c)` | Unregisters listeners.
    `void` | `uninstallUI​(JComponent c)` | Reverses configuration which was done on the specified component during `installUI`.
    `protected void` | `updateColumnHeader​(PropertyChangeEvent e)` | Updates column header.
    `protected void` | `updateRowHeader​(PropertyChangeEvent e)` | Updates row header.
    `protected void` | `updateScrollBarDisplayPolicy​(PropertyChangeEvent e)` | Updates a scroll bar display policy.
    `protected void` | `updateViewport​(PropertyChangeEvent e)` | Updates viewport.

    - ### Methods inherited from class javax.swing.plaf.ComponentUI

      `contains, getAccessibleChild, getAccessibleChildrenCount, getMinimumSize, getPreferredSize, update`

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

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

- - ### Field Detail

    - #### scrollpane

          protected JScrollPane scrollpane

      The instance of `JScrollPane`.

    - #### vsbChangeListener

          protected ChangeListener vsbChangeListener

      `ChangeListener` installed on the vertical scrollbar.

    - #### hsbChangeListener

          protected ChangeListener hsbChangeListener

      `ChangeListener` installed on the horizontal scrollbar.

    - #### viewportChangeListener

          protected ChangeListener viewportChangeListener

      `ChangeListener` installed on the viewport.

    - #### spPropertyChangeListener

          protected PropertyChangeListener spPropertyChangeListener

      `PropertyChangeListener` installed on the scroll pane.

  - ### Constructor Detail

    - #### BasicScrollPaneUI

          public BasicScrollPaneUI​()

  - ### Method Detail

    - #### createUI

          public static ComponentUI createUI​(JComponent x)

      Returns a new instance of `BasicScrollPaneUI`.
      Parameters:
        `x` - a component.
      Returns:
        a new instance of `BasicScrollPaneUI`

    - #### paint

          public void paint​(Graphics g,
                            JComponent c)

      Description copied from class: `ComponentUI`
      Paints the specified component appropriately for the look and feel. This method is invoked from the `ComponentUI.update` method when the specified component is being painted. Subclasses should override this method and use the specified `Graphics` object to render the content of the component.
      Overrides:
        `paint` in class `ComponentUI`
      Parameters:
        `g` - the `Graphics` context in which to paint
        `c` - the component being painted; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
      See Also:
        `ComponentUI.update(java.awt.Graphics, javax.swing.JComponent)`

    - #### getMaximumSize

          public Dimension getMaximumSize​(JComponent c)

      Description copied from class: `ComponentUI`
      Returns the specified component's maximum size appropriate for the look and feel. If `null` is returned, the maximum size will be calculated by the component's layout manager instead (this is the preferred approach for any component with a specific layout manager installed). The default implementation of this method invokes `getPreferredSize` and returns that value.
      Overrides:
        `getMaximumSize` in class `ComponentUI`
      Parameters:
        `c` - the component whose maximum size is being queried; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
      Returns:
        new Dimension(Short.MAX_VALUE, Short.MAX_VALUE)
      See Also:
        `JComponent.getMaximumSize()`, `LayoutManager2.maximumLayoutSize(java.awt.Container)`

    - #### installDefaults

          protected void installDefaults​(JScrollPane scrollpane)

      Installs default properties.
      Parameters:
        `scrollpane` - an instance of `JScrollPane`

    - #### installListeners

          protected void installListeners​(JScrollPane c)

      Registers listeners.
      Parameters:
        `c` - an instance of `JScrollPane`

    - #### installKeyboardActions

          protected void installKeyboardActions​(JScrollPane c)

      Registers keyboard actions.
      Parameters:
        `c` - an instance of `JScrollPane`

    - #### installUI

          public void installUI​(JComponent x)

      Description copied from class: `ComponentUI`
      Configures the specified component appropriately for the look and feel. This method is invoked when the `ComponentUI` instance is being installed as the UI delegate on the specified component. This method should completely configure the component for the look and feel, including the following:
      1. Install default property values for color, fonts, borders, icons, opacity, etc. on the component. Whenever possible, property values initialized by the client program should not be overridden.
      2. Install a `LayoutManager` on the component if necessary.
      3. Create/add any required sub-components to the component.
      4. Create/install event listeners on the component.
      5. Create/install a `PropertyChangeListener` on the component in order to detect and respond to component property changes appropriately.
      6. Install keyboard UI (mnemonics, traversal, etc.) on the component.
      7. Initialize any appropriate instance data.
      Overrides:
        `installUI` in class `ComponentUI`
      Parameters:
        `x` - the component where this UI delegate is being installed
      See Also:
        `ComponentUI.uninstallUI(javax.swing.JComponent)`, `JComponent.setUI(javax.swing.plaf.ComponentUI)`, `JComponent.updateUI()`

    - #### uninstallDefaults

          protected void uninstallDefaults​(JScrollPane c)

      Uninstalls default properties.
      Parameters:
        `c` - an instance of `JScrollPane`

    - #### uninstallListeners

          protected void uninstallListeners​(JComponent c)

      Unregisters listeners.
      Parameters:
        `c` - a component

    - #### uninstallKeyboardActions

          protected void uninstallKeyboardActions​(JScrollPane c)

      Unregisters keyboard actions.
      Parameters:
        `c` - an instance of `JScrollPane`

    - #### uninstallUI

          public void uninstallUI​(JComponent c)

      Description copied from class: `ComponentUI`
      Reverses configuration which was done on the specified component during `installUI`. This method is invoked when this `UIComponent` instance is being removed as the UI delegate for the specified component. This method should undo the configuration performed in `installUI`, being careful to leave the `JComponent` instance in a clean state (no extraneous listeners, look-and-feel-specific property objects, etc.). This should include the following:
      1. Remove any UI-set borders from the component.
      2. Remove any UI-set layout managers on the component.
      3. Remove any UI-added sub-components from the component.
      4. Remove any UI-added event/property listeners from the component.
      5. Remove any UI-installed keyboard UI from the component.
      6. Nullify any allocated instance data objects to allow for GC.
      Overrides:
        `uninstallUI` in class `ComponentUI`
      Parameters:
        `c` - the component from which this UI delegate is being removed; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
      See Also:
        `ComponentUI.installUI(javax.swing.JComponent)`, `JComponent.updateUI()`

    - #### syncScrollPaneWithViewport

          protected void syncScrollPaneWithViewport​()

      Synchronizes the `JScrollPane` with `Viewport`.

    - #### getBaseline

          public int getBaseline​(JComponent c,
                                 int width,
                                 int height)

      Returns the baseline.
      Overrides:
        `getBaseline` in class `ComponentUI`
      Parameters:
        `c` - `JComponent` baseline is being requested for
        `width` - the width to get the baseline for
        `height` - the height to get the baseline for
      Returns:
        baseline or a value < 0 indicating there is no reasonable baseline
      Throws:
        `NullPointerException` - if `c` is `null`
        `IllegalArgumentException` - if width or height is < 0
      Since:
        1.6
      See Also:
        `JComponent.getBaseline(int, int)`

    - #### getBaselineResizeBehavior

          public Component.BaselineResizeBehavior getBaselineResizeBehavior​(JComponent c)

      Returns an enum indicating how the baseline of the component changes as the size changes.
      Overrides:
        `getBaselineResizeBehavior` in class `ComponentUI`
      Parameters:
        `c` - `JComponent` to return baseline resize behavior for
      Returns:
        an enum indicating how the baseline changes as the component size changes
      Throws:
        `NullPointerException` - if `c` is `null`
      Since:
        1.6
      See Also:
        `JComponent.getBaseline(int, int)`

    - #### createViewportChangeListener

          protected ChangeListener createViewportChangeListener​()

      Returns an instance of viewport `ChangeListener`.
      Returns:
        an instance of viewport `ChangeListener`

    - #### createHSBChangeListener

          protected ChangeListener createHSBChangeListener​()

      Returns an instance of horizontal scroll bar `ChangeListener`.
      Returns:
        an instance of horizontal scroll bar `ChangeListener`

    - #### createVSBChangeListener

          protected ChangeListener createVSBChangeListener​()

      Returns an instance of vertical scroll bar `ChangeListener`.
      Returns:
        an instance of vertical scroll bar `ChangeListener`

    - #### createMouseWheelListener

          protected MouseWheelListener createMouseWheelListener​()

      Creates an instance of MouseWheelListener, which is added to the JScrollPane by installUI(). The returned MouseWheelListener is used to handle mouse wheel-driven scrolling.
      Returns:
        MouseWheelListener which implements wheel-driven scrolling
      Since:
        1.4
      See Also:
        `installUI(javax.swing.JComponent)`, `BasicScrollPaneUI.MouseWheelHandler`

    - #### updateScrollBarDisplayPolicy

          protected void updateScrollBarDisplayPolicy​(PropertyChangeEvent e)

      Updates a scroll bar display policy.
      Parameters:
        `e` - the property change event

    - #### updateViewport

          protected void updateViewport​(PropertyChangeEvent e)

      Updates viewport.
      Parameters:
        `e` - the property change event

    - #### updateRowHeader

          protected void updateRowHeader​(PropertyChangeEvent e)

      Updates row header.
      Parameters:
        `e` - the property change event

    - #### updateColumnHeader

          protected void updateColumnHeader​(PropertyChangeEvent e)

      Updates column header.
      Parameters:
        `e` - the property change event

    - #### createPropertyChangeListener

          protected PropertyChangeListener createPropertyChangeListener​()

      Creates an instance of `PropertyChangeListener` that's added to the `JScrollPane` by `installUI()`. Subclasses can override this method to return a custom `PropertyChangeListener`, e.g.

           class MyScrollPaneUI extends BasicScrollPaneUI {
              protected PropertyChangeListener createPropertyChangeListener() {
                  return new MyPropertyChangeListener();
              }
              public class MyPropertyChangeListener extends PropertyChangeListener {
                  public void propertyChange(PropertyChangeEvent e) {
                      if (e.getPropertyName().equals("viewport")) {
                          // do some extra work when the viewport changes
                      }
                      super.propertyChange(e);
                  }
              }
           }

      Returns:
        an instance of `PropertyChangeListener`
      See Also:
        `PropertyChangeListener`, `installUI(javax.swing.JComponent)`