org.crosswire.common.swing

## Class AltFixedSplitPane

- java.lang.Object
- - java.awt.Component
  - - java.awt.Container
    - - javax.swing.JComponent
      - - javax.swing.JSplitPane
        - - org.crosswire.common.swing.AltFixedSplitPane

- All Implemented Interfaces:
    ImageObserver, MenuContainer, Serializable, Accessible

      public class AltFixedSplitPane
      extends JSplitPane

  This is a hack to fix the setDividerLocation problem and other layout problems.

  See Bug Parade 4101306, 4485465 for a description of the WIDE divider problem.

  Bug Reports on JSplitpane setDividerLocation
  4101306, 4125713, 4148530

  From the javadoc for setDividerLocation(double): -------------------------------------------

  This method is implemented in terms of setDividerLocation(int). This method immediately changes the size of the receiver based on its current size. If the receiver is not correctly realized and on screen, this method will have no effect (new divider location will become (current size * proportionalLocation) which is 0).
  -------------------------------------------
  So, as you can see the JSplitPane MUST be visible invoking this method otherwise it will not have the desired effect.

  Another, Bug Report 4786896 notes that if the preferred sizes of the two components plus the divider of the split pane adds up to more than the preferred size of the JSplitPane, then JSplitPane will use the minimum size of the components.

  Since the preferred way of managing the sizes of containers is not with pixel counts, the solution here is to set the preferred size to zero.

  See Bug Parade: 4265389 for a description of the ComponentOrientation problem.

  Author:
    DM Smith
  See Also:
    `The GNU General Public License for details.`, Serialized Form

- - ### Nested Class Summary

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

      `JSplitPane.AccessibleJSplitPane`

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

      `JComponent.AccessibleJComponent`

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

      `Container.AccessibleAWTContainer`

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

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

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `private static Dimension` | `DOT`
    `private static Border` | `EMPTY_BORDER` An Empty Border
    `private boolean` | `firstValidate`
    `private boolean` | `hasProportionalLocation`
    `static String` | `PROPERTYNAME_VISIBLE_DIVIDER_BORDER` Property for border visibility
    `private double` | `proportionalLocation`
    `private static long` | `serialVersionUID` Serialization ID
    `private boolean` | `visibleDividerBorder` Hint for whether Divider border should be visible.

    - ### 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 java.awt.image.ImageObserver

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

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `AltFixedSplitPane()` Constructor for FixedSplitPane
    `AltFixedSplitPane(boolean visibleDividerBorder)` Constructor for FixedSplitPane that has no divider shadow and starts out with an empty border.
    `AltFixedSplitPane(int arg0)` Constructor for FixedSplitPane
    `AltFixedSplitPane(int arg0, boolean arg1)` Constructor for FixedSplitPane
    `AltFixedSplitPane(int arg0, boolean arg1, Component arg2, Component arg3)` Constructor for FixedSplitPane
    `AltFixedSplitPane(int arg0, Component arg1, Component arg2)` Constructor for FixedSplitPane

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `addImpl(Component comp, Object constraints, int index)`
    `boolean` | `isVisibleDividerBorder()` Whether visible borders are hinted
    `void` | `setBottomComponent(Component comp)`
    `void` | `setComponentOrientation(ComponentOrientation o)`
    `void` | `setDividerLocation(double newProportionalLoc)` Sets the divider location as a percentage of the JSplitPane's size.
    `void` | `setLeftComponent(Component comp)`
    `void` | `setResizeWeight(double newResizeWeight)` Sets the divider location as a percentage of the JSplitPane's size.
    `void` | `setRightComponent(Component comp)`
    `void` | `setTopComponent(Component comp)`
    `void` | `setVisibleDividerBorder(boolean newVisibility)` Set a hint whether the border should be visible or not.
    `void` | `updateUI()`
    `void` | `validate()` Validates this container and all of its subcomponents.

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

      `getAccessibleContext, getBottomComponent, getDividerLocation, getDividerSize, getLastDividerLocation, getLeftComponent, getMaximumDividerLocation, getMinimumDividerLocation, getOrientation, getResizeWeight, getRightComponent, getTopComponent, getUI, getUIClassID, isContinuousLayout, isOneTouchExpandable, isValidateRoot, paintChildren, paramString, remove, remove, removeAll, resetToPreferredSizes, setContinuousLayout, setDividerLocation, setDividerSize, setLastDividerLocation, setOneTouchExpandable, setOrientation, setUI`

    - ### 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, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, 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, doLayout, 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, 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, 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, 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, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### DOT

          private static final Dimension DOT

    - #### firstValidate

          private boolean firstValidate

    - #### hasProportionalLocation

          private boolean hasProportionalLocation

    - #### proportionalLocation

          private double proportionalLocation

    - #### PROPERTYNAME_VISIBLE_DIVIDER_BORDER

          public static final String PROPERTYNAME_VISIBLE_DIVIDER_BORDER

      Property for border visibility
      See Also:
        Constant Field Values

    - #### EMPTY_BORDER

          private static final Border EMPTY_BORDER

      An Empty Border

    - #### visibleDividerBorder

          private boolean visibleDividerBorder

      Hint for whether Divider border should be visible.

    - #### serialVersionUID

          private static final long serialVersionUID

      Serialization ID
      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### AltFixedSplitPane

          public AltFixedSplitPane()

      Constructor for FixedSplitPane

    - #### AltFixedSplitPane

          public AltFixedSplitPane(boolean visibleDividerBorder)

      Constructor for FixedSplitPane that has no divider shadow and starts out with an empty border.

    - #### AltFixedSplitPane

          public AltFixedSplitPane(int arg0)

      Constructor for FixedSplitPane

    - #### AltFixedSplitPane

          public AltFixedSplitPane(int arg0,
                           boolean arg1)

      Constructor for FixedSplitPane

    - #### AltFixedSplitPane

          public AltFixedSplitPane(int arg0,
                           Component arg1,
                           Component arg2)

      Constructor for FixedSplitPane

    - #### AltFixedSplitPane

          public AltFixedSplitPane(int arg0,
                           boolean arg1,
                           Component arg2,
                           Component arg3)

      Constructor for FixedSplitPane

  - ### Method Detail

    - #### setComponentOrientation

          public void setComponentOrientation(ComponentOrientation o)

      Overrides:
        `setComponentOrientation` in class `Component`

    - #### addImpl

          protected void addImpl(Component comp,
                     Object constraints,
                     int index)

      Overrides:
        `addImpl` in class `JSplitPane`

    - #### setBottomComponent

          public void setBottomComponent(Component comp)

      Overrides:
        `setBottomComponent` in class `JSplitPane`

    - #### setLeftComponent

          public void setLeftComponent(Component comp)

      Overrides:
        `setLeftComponent` in class `JSplitPane`

    - #### setRightComponent

          public void setRightComponent(Component comp)

      Overrides:
        `setRightComponent` in class `JSplitPane`

    - #### setTopComponent

          public void setTopComponent(Component comp)

      Overrides:
        `setTopComponent` in class `JSplitPane`

    - #### validate

          public void validate()

      Validates this container and all of its subcomponents. The first time this method is called, the initial divider position is set.
      Overrides:
        `validate` in class `Container`

    - #### setDividerLocation

          public void setDividerLocation(double newProportionalLoc)

      Sets the divider location as a percentage of the JSplitPane's size.
      Overrides:
        `setDividerLocation` in class `JSplitPane`

    - #### setResizeWeight

          public void setResizeWeight(double newResizeWeight)

      Sets the divider location as a percentage of the JSplitPane's size.
      Overrides:
        `setResizeWeight` in class `JSplitPane`

    - #### isVisibleDividerBorder

          public boolean isVisibleDividerBorder()

      Whether visible borders are hinted
      Returns:
        the divider border visiblity hint

    - #### setVisibleDividerBorder

          public void setVisibleDividerBorder(boolean newVisibility)

      Set a hint whether the border should be visible or not. Look and feels may ignore this.
      Parameters:
        `newVisibility` -

    - #### updateUI

          public void updateUI()

      Overrides:
        `updateUI` in class `JSplitPane`