org.flexdock.docking.defaults

## Class DockingSplitPane

- java.lang.Object
- - java.awt.Component
  - - java.awt.Container
    - - javax.swing.JComponent
      - - javax.swing.JSplitPane
        - - org.flexdock.docking.defaults.DockingSplitPane

- All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, DockingConstants

      public class DockingSplitPane
      extends javax.swing.JSplitPane
      implements DockingConstants

  Author:
    Christopher Butler
  See Also:
    Serialized Form

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class javax.swing.JSplitPane

      `javax.swing.JSplitPane.AccessibleJSplitPane`

    - ### Nested classes/interfaces inherited from class javax.swing.JComponent

      `javax.swing.JComponent.AccessibleJComponent`

    - ### Nested classes/interfaces inherited from class java.awt.Container

      `java.awt.Container.AccessibleAWTContainer`

    - ### Nested classes/interfaces inherited from class java.awt.Component

      `java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `protected boolean` | `controllerInTopLeft`
    `protected boolean` | `dividerLocDetermined`
    `protected DockingPort` | `dockingPort`
    `protected double` | `initialDividerRatio`
    `protected double` | `percent`
    `protected java.lang.String` | `region`

    - ### Fields inherited from class javax.swing.JSplitPane

      `BOTTOM, CONTINUOUS_LAYOUT_PROPERTY, continuousLayout, DIVIDER, DIVIDER_LOCATION_PROPERTY, DIVIDER_SIZE_PROPERTY, dividerSize, HORIZONTAL_SPLIT, LAST_DIVIDER_LOCATION_PROPERTY, lastDividerLocation, LEFT, leftComponent, ONE_TOUCH_EXPANDABLE_PROPERTY, oneTouchExpandable, orientation, ORIENTATION_PROPERTY, RESIZE_WEIGHT_PROPERTY, RIGHT, rightComponent, TOP, VERTICAL_SPLIT`

    - ### Fields inherited from class javax.swing.JComponent

      `accessibleContext, listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW`

    - ### Fields inherited from class java.awt.Component

      `BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT`

    - ### Fields inherited from interface org.flexdock.docking.DockingConstants

      `ACTIVE_WINDOW, BOTTOM, CENTER, CENTER_REGION, CLOSE_ACTION, DEFAULT_PERSISTENCE_KEY, DOCKING_ID, EAST_REGION, HEAVYWEIGHT_DOCKABLES, HORIZONTAL, LEFT, MOUSE_PRESSED, NORTH_REGION, PERMANENT_FOCUS_OWNER, PIN_ACTION, REGION, RIGHT, SOUTH_REGION, TOP, UNINITIALIZED, UNINITIALIZED_RATIO, UNKNOWN_REGION, UNSPECIFIED_SIBLING_PREF, VERTICAL, WEST_REGION`

    - ### Fields inherited from interface java.awt.image.ImageObserver

      `ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `DockingSplitPane(DockingPort port, java.lang.String region)` Creates a new `DockingSplitPane` for the specified `DockingPort` with the understanding that the resulting `DockingSplitPane` will be used for docking a `Dockable` into the `DockingPort's` specified `region`.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `cleanup()` Releases any internal references to external objects to aid garbage collection.
    `void` | `doLayout()` Overridden to ensure proper divider location on initial rendering.
    `protected void` | `finalize()`
    `java.awt.Component` | `getElderComponent()` Returns the 'oldest' `Component` to have been added to this `DockingSplitPane` as a result of a docking operation.
    `double` | `getPercent()`
    `java.lang.String` | `getRegion()` Returns the docking region for which this `DockingSplitPane` was created.
    `protected boolean` | `isDividerSizeProperlyDetermined()`
    `boolean` | `isElderTopLeft()` Indicates whether the 'oldest' `Component` to have been added to this `DockingSplitPane` as a result of a docking operation is in the TOP or LEFT side of the split pane.
    `void` | `resetToPreferredSizes()`
    `void` | `setConstantPercent(boolean cstPercent)`
    `void` | `setDividerLocation(double percent)`
    `void` | `setInitialDividerRatio(double ratio)` Sets the initial divider ration for creating split panes.

    - ### Methods inherited from class javax.swing.JSplitPane

      `addImpl, getAccessibleContext, getBottomComponent, getDividerLocation, getDividerSize, getLastDividerLocation, getLeftComponent, getMaximumDividerLocation, getMinimumDividerLocation, getOrientation, getResizeWeight, getRightComponent, getTopComponent, getUI, getUIClassID, isContinuousLayout, isOneTouchExpandable, isValidateRoot, paintChildren, paramString, remove, remove, removeAll, setBottomComponent, setContinuousLayout, setDividerLocation, setDividerSize, setLastDividerLocation, setLeftComponent, setOneTouchExpandable, setOrientation, setResizeWeight, setRightComponent, setTopComponent, setUI, updateUI`

    - ### Methods inherited from class javax.swing.JComponent

      `addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingTile, isRequestFocusEnabled, paint, paintBorder, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update`

    - ### Methods inherited from class java.awt.Container

      `add, add, add, add, add, addContainerListener, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree`

    - ### Methods inherited from class java.awt.Component

      `action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle`

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

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

- - ### Field Detail

    - #### dockingPort

          protected DockingPort dockingPort

    - #### region

          protected java.lang.String region

    - #### dividerLocDetermined

          protected boolean dividerLocDetermined

    - #### controllerInTopLeft

          protected boolean controllerInTopLeft

    - #### initialDividerRatio

          protected double initialDividerRatio

    - #### percent

          protected double percent

  - ### Constructor Detail

    - #### DockingSplitPane

          public DockingSplitPane(DockingPort port,
                          java.lang.String region)

      Creates a new `DockingSplitPane` for the specified `DockingPort` with the understanding that the resulting `DockingSplitPane` will be used for docking a `Dockable` into the `DockingPort's` specified `region`. Neither `port` or `region` may be `null`. `region` must be a valid docking region as defined by `isValidDockingRegion(String region)`.
      Parameters:
        `port` - the `DockingPort` for which this `DockingSplitPane` is to be created.
        `region` - the region within the specified `DockingPort` for which this `DockingSplitPane` is to be created.
      Throws:
        `{@code` - IllegalArgumentException} if either `port` is `null` or }region} is `null` or invalid.
      See Also:
        `DockingManager.isValidDockingRegion(String)`

  - ### Method Detail

    - #### setConstantPercent

          public void setConstantPercent(boolean cstPercent)

    - #### resetToPreferredSizes

          public void resetToPreferredSizes()

      Overrides:
        `resetToPreferredSizes` in class `javax.swing.JSplitPane`

    - #### setDividerLocation

          public void setDividerLocation(double percent)

      Overrides:
        `setDividerLocation` in class `javax.swing.JSplitPane`

    - #### getPercent

          public double getPercent()

    - #### isDividerSizeProperlyDetermined

          protected boolean isDividerSizeProperlyDetermined()

    - #### getElderComponent

          public java.awt.Component getElderComponent()

      Returns the 'oldest' `Component` to have been added to this `DockingSplitPane` as a result of a docking operation. A `DockingSplitPane` is created based upon the need to share space within a `DockingPort` between two `Dockables`. This happens when a new `Dockable` is introduced into an outer region of a `DockingPort` that already contains a `Dockable`. The `Dockable` that was in the `DockingPort` prior to splitting the layout is the 'elder' `Component` and, in many circumstances, may be used to control initial divider location and resize weight.

      If this split pane contains `DockingPorts` as its child components, then this method will return the `Component` determined by calling `getDockedComponent()` for the `DockingPort` in this split pane's elder region.

      The elder region of this `DockingSplitPane` is determined using the value returned from `getRegion()`, where `getRegion()` indicates the docking region of the 'new' `Dockable` for this `DockingSplitPane`.

      Returns:
        the 'oldest' `Component` to have been added to this `DockingSplitPane` as a result of a docking operation.
      See Also:
        `getRegion()`, `DockingPort.getDockedComponent()`

    - #### getRegion

          public java.lang.String getRegion()

      Returns the docking region for which this `DockingSplitPane` was created. A `DockingSplitPane` is created based upon the need to share space within a `DockingPort` between two `Dockables`. This happens when a new `Dockable` is introduced into an outer region of a `DockingPort` that already contains a `Dockable`. This method returns that outer region for which this `DockingSplitPane` was created and may be used to control the orientation of the split pane. The region returned by this method will be the same passed into the `DockingSplitPane` constructor on instantiation.
      Returns:
        the docking region for which this `DockingSplitPane` was created.
      See Also:
        `DockingSplitPane(DockingPort, String)`

    - #### isElderTopLeft

          public boolean isElderTopLeft()

      Indicates whether the 'oldest' `Component` to have been added to this `DockingSplitPane` as a result of a docking operation is in the TOP or LEFT side of the split pane. A `DockingSplitPane` is created based upon the need to share space within a `DockingPort` between two `Dockables`. This happens when a new `Dockable` is introduced into an outer region of a `DockingPort` that already contains a `Dockable`. The `Dockable` that was in the `DockingPort` prior to splitting the layout is the 'elder' `Component` and is returned by `getElderComponent()`. This method indicates whether or not that `Component` is in the TOP or LEFT side of this `DockingSplitPane`.

      The elder region of this `DockingSplitPane` is determined using the value returned from `getRegion()`, where `getRegion()` indicates the docking region of the 'new' `Dockable` for this `DockingSplitPane`.

      Returns:
        `true` if the 'oldest' `Component` to have been added to this `DockingSplitPane` is in the TOP or LEFT side of the split pane; `false` otherwise.
      See Also:
        `getElderComponent()`, `getRegion()`

    - #### doLayout

          public void doLayout()

      Overridden to ensure proper divider location on initial rendering. Sometimes, a split divider location is set as a proportion before the split pane itself has been fully realized in the container hierarchy. This results in a layout calculation based on a proportion of zero width or height, rather than the desired proportion of width or height after the split pane has been fully rendered. This method ensures that default `JSplitPane` layout behavior is deferred until after the initial dimensions of this split pane have been properly determined.
      Overrides:
        `doLayout` in class `java.awt.Container`
      See Also:
        `Container.doLayout()`, `JSplitPane.setDividerLocation(double)`

    - #### cleanup

          public void cleanup()

      Releases any internal references to external objects to aid garbage collection. This method is `public` and may be invoked manually for proactive memory management. Otherwise, this method is invoked by this `DockingSplitPane's` `finalize()` method.

    - #### setInitialDividerRatio

          public void setInitialDividerRatio(double ratio)

      Sets the initial divider ration for creating split panes. The default value is `0.5`.
      Parameters:
        `ratio` - a ratio for determining weighting between the two sides of a split pane.
      Throws:
        `java.lang.IllegalArgumentException` - if `ratio` is less than 0.0 or greater than 1.0.

    - #### finalize

          protected void finalize()
                           throws java.lang.Throwable

      Overrides:
        `finalize` in class `java.lang.Object`
      Throws:
        `java.lang.Throwable`