public class JSplitPane extends JComponent implements Accessible
JSplitPane
is used to divide two (and only two) Component
s. The two Component
s are graphically divided based on the look and feel implementation, and the two Component
s can then be interactively resized by the user. Information on using JSplitPane
is in How to Use Split Panes in The Java Tutorial.
The two Component
s in a split pane can be aligned left to right using JSplitPane.HORIZONTAL_SPLIT
, or top to bottom using JSplitPane.VERTICAL_SPLIT
. The preferred way to change the size of the Component
s is to invoke setDividerLocation
where location
is either the new x or y position, depending on the orientation of the JSplitPane
.
To resize the Component
s to their preferred sizes invoke resetToPreferredSizes
.
When the user is resizing the Component
s the minimum size of the Components
is used to determine the maximum/minimum position the Component
s can be set to. If the minimum size of the two components is greater than the size of the split pane the divider will not allow you to resize it. To alter the minimum size of a JComponent
, see JComponent.setMinimumSize(java.awt.Dimension)
.
When the user resizes the split pane the new space is distributed between the two components based on the resizeWeight
property. A value of 0, the default, indicates the right/bottom component gets all the space, where as a value of 1 indicates the left/top component gets all the space.
Warning: Swing is not thread safe. For more information see Swing's Threading Policy.
Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeans™ has been added to the java.beans
package. Please see XMLEncoder
.
Modifier and Type | Class and Description |
---|---|
protected class |
JSplitPane.AccessibleJSplitPane This class implements accessibility support for the |
JComponent.AccessibleJComponent
Container.AccessibleAWTContainer
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
public static final int VERTICAL_SPLIT
Vertical split indicates the Component
s are split along the y axis. For example the two Component
s will be split one on top of the other.
public static final int HORIZONTAL_SPLIT
Horizontal split indicates the Component
s are split along the x axis. For example the two Component
s will be split one to the left of the other.
public static final String LEFT
Used to add a Component
to the left of the other Component
.
public static final String RIGHT
Used to add a Component
to the right of the other Component
.
public static final String TOP
Used to add a Component
above the other Component
.
public static final String BOTTOM
Used to add a Component
below the other Component
.
public static final String DIVIDER
Used to add a Component
that will represent the divider.
public static final String ORIENTATION_PROPERTY
Bound property name for orientation (horizontal or vertical).
public static final String CONTINUOUS_LAYOUT_PROPERTY
Bound property name for continuousLayout.
public static final String DIVIDER_SIZE_PROPERTY
Bound property name for border.
public static final String ONE_TOUCH_EXPANDABLE_PROPERTY
Bound property for oneTouchExpandable.
public static final String LAST_DIVIDER_LOCATION_PROPERTY
Bound property for lastLocation.
public static final String DIVIDER_LOCATION_PROPERTY
Bound property for the dividerLocation.
public static final String RESIZE_WEIGHT_PROPERTY
Bound property for weight.
protected int orientation
How the views are split.
protected boolean continuousLayout
Whether or not the views are continuously redisplayed while resizing.
protected Component leftComponent
The left or top component.
protected Component rightComponent
The right or bottom component.
protected int dividerSize
Size of the divider.
protected boolean oneTouchExpandable
Is a little widget provided to quickly expand/collapse the split pane?
protected int lastDividerLocation
Previous location of the split pane.
public JSplitPane()
Creates a new JSplitPane
configured to arrange the child components side-by-side horizontally, using two buttons for the components.
@ConstructorProperties(value="orientation") public JSplitPane(int newOrientation)
Creates a new JSplitPane
configured with the specified orientation.
newOrientation
- JSplitPane.HORIZONTAL_SPLIT
or JSplitPane.VERTICAL_SPLIT
IllegalArgumentException
- if orientation
is not one of HORIZONTAL_SPLIT or VERTICAL_SPLIT.public JSplitPane(int newOrientation, boolean newContinuousLayout)
Creates a new JSplitPane
with the specified orientation and redrawing style.
newOrientation
- JSplitPane.HORIZONTAL_SPLIT
or JSplitPane.VERTICAL_SPLIT
newContinuousLayout
- a boolean, true for the components to redraw continuously as the divider changes position, false to wait until the divider position stops changing to redrawIllegalArgumentException
- if orientation
is not one of HORIZONTAL_SPLIT or VERTICAL_SPLITpublic JSplitPane(int newOrientation, Component newLeftComponent, Component newRightComponent)
Creates a new JSplitPane
with the specified orientation and the specified components.
newOrientation
- JSplitPane.HORIZONTAL_SPLIT
or JSplitPane.VERTICAL_SPLIT
newLeftComponent
- the Component
that will appear on the left of a horizontally-split pane, or at the top of a vertically-split panenewRightComponent
- the Component
that will appear on the right of a horizontally-split pane, or at the bottom of a vertically-split paneIllegalArgumentException
- if orientation
is not one of: HORIZONTAL_SPLIT or VERTICAL_SPLITpublic JSplitPane(int newOrientation, boolean newContinuousLayout, Component newLeftComponent, Component newRightComponent)
Creates a new JSplitPane
with the specified orientation and redrawing style, and with the specified components.
newOrientation
- JSplitPane.HORIZONTAL_SPLIT
or JSplitPane.VERTICAL_SPLIT
newContinuousLayout
- a boolean, true for the components to redraw continuously as the divider changes position, false to wait until the divider position stops changing to redrawnewLeftComponent
- the Component
that will appear on the left of a horizontally-split pane, or at the top of a vertically-split panenewRightComponent
- the Component
that will appear on the right of a horizontally-split pane, or at the bottom of a vertically-split paneIllegalArgumentException
- if orientation
is not one of HORIZONTAL_SPLIT or VERTICAL_SPLITpublic void setUI(SplitPaneUI ui)
Sets the L&F object that renders this component.
ui
- the SplitPaneUI
L&F objectUIDefaults.getUI(javax.swing.JComponent)
public SplitPaneUI getUI()
Returns the SplitPaneUI
that is providing the current look and feel.
SplitPaneUI
object that renders this componentpublic void updateUI()
Notification from the UIManager
that the L&F has changed. Replaces the current UI object with the latest version from the UIManager
.
updateUI
in class JComponent
JComponent.updateUI()
public String getUIClassID()
Returns the name of the L&F class that renders this component.
getUIClassID
in class JComponent
JComponent.getUIClassID()
, UIDefaults.getUI(javax.swing.JComponent)
public void setDividerSize(int newSize)
Sets the size of the divider.
newSize
- an integer giving the size of the divider in pixelspublic int getDividerSize()
Returns the size of the divider.
public void setLeftComponent(Component comp)
Sets the component to the left (or above) the divider.
comp
- the Component
to display in that positionpublic Component getLeftComponent()
Returns the component to the left (or above) the divider.
Component
displayed in that positionpublic void setTopComponent(Component comp)
Sets the component above, or to the left of the divider.
comp
- the Component
to display in that positionpublic Component getTopComponent()
Returns the component above, or to the left of the divider.
Component
displayed in that positionpublic void setRightComponent(Component comp)
Sets the component to the right (or below) the divider.
comp
- the Component
to display in that positionpublic Component getRightComponent()
Returns the component to the right (or below) the divider.
Component
displayed in that positionpublic void setBottomComponent(Component comp)
Sets the component below, or to the right of the divider.
comp
- the Component
to display in that positionpublic Component getBottomComponent()
Returns the component below, or to the right of the divider.
Component
displayed in that positionpublic void setOneTouchExpandable(boolean newValue)
Sets the value of the oneTouchExpandable
property, which must be true
for the JSplitPane
to provide a UI widget on the divider to quickly expand/collapse the divider. The default value of this property is false
. Some look and feels might not support one-touch expanding; they will ignore this property.
newValue
- true
to specify that the split pane should provide a collapse/expand widgetisOneTouchExpandable()
public boolean isOneTouchExpandable()
Gets the oneTouchExpandable
property.
oneTouchExpandable
propertysetOneTouchExpandable(boolean)
public void setLastDividerLocation(int newLastLocation)
Sets the last location the divider was at to newLastLocation
.
newLastLocation
- an integer specifying the last divider location in pixels, from the left (or upper) edge of the pane to the left (or upper) edge of the dividerpublic int getLastDividerLocation()
Returns the last location the divider was at.
public void setOrientation(int orientation)
Sets the orientation, or how the splitter is divided. The options are:
orientation
- an integer specifying the orientationIllegalArgumentException
- if orientation is not one of: HORIZONTAL_SPLIT or VERTICAL_SPLIT.public int getOrientation()
Returns the orientation.
setOrientation(int)
public void setContinuousLayout(boolean newContinuousLayout)
Sets the value of the continuousLayout
property, which must be true
for the child components to be continuously redisplayed and laid out during user intervention. The default value of this property is look and feel dependent. Some look and feels might not support continuous layout; they will ignore this property.
newContinuousLayout
- true
if the components should continuously be redrawn as the divider changes positionisContinuousLayout()
public boolean isContinuousLayout()
Gets the continuousLayout
property.
continuousLayout
propertysetContinuousLayout(boolean)
public void setResizeWeight(double value)
Specifies how to distribute extra space when the size of the split pane changes. A value of 0, the default, indicates the right/bottom component gets all the extra space (the left/top component acts fixed), where as a value of 1 specifies the left/top component gets all the extra space (the right/bottom component acts fixed). Specifically, the left/top component gets (weight * diff) extra space and the right/bottom component gets (1 - weight) * diff extra space.
value
- as described aboveIllegalArgumentException
- if value
is < 0 or > 1public double getResizeWeight()
Returns the number that determines how extra space is distributed.
public void resetToPreferredSizes()
Lays out the JSplitPane
layout based on the preferred size of the children components. This will likely result in changing the divider location.
public void setDividerLocation(double proportionalLocation)
Sets the divider location as a percentage of the JSplitPane
's size.
This method is implemented in terms of setDividerLocation(int)
. This method immediately changes the size of the split pane based on its current size. If the split pane is not correctly realized and on screen, this method will have no effect (new divider location will become (current size * proportionalLocation) which is 0).
proportionalLocation
- a double-precision floating point value that specifies a percentage, from zero (top/left) to 1.0 (bottom/right)IllegalArgumentException
- if the specified location is < 0 or > 1.0public void setDividerLocation(int location)
Sets the location of the divider. This is passed off to the look and feel implementation, and then listeners are notified. A value less than 0 implies the divider should be reset to a value that attempts to honor the preferred size of the left/top component. After notifying the listeners, the last divider location is updated, via setLastDividerLocation
.
location
- an int specifying a UI-specific value (typically a pixel count)public int getDividerLocation()
Returns the last value passed to setDividerLocation
. The value returned from this method may differ from the actual divider location (if setDividerLocation
was passed a value bigger than the current size).
public int getMinimumDividerLocation()
Returns the minimum location of the divider from the look and feel implementation.
null
public int getMaximumDividerLocation()
Returns the maximum location of the divider from the look and feel implementation.
null
public void remove(Component component)
Removes the child component, component
from the pane. Resets the leftComponent
or rightComponent
instance variable, as necessary.
remove
in class Container
component
- the Component
to removeContainer.add(java.awt.Component)
, Container.invalidate()
, Container.validate()
, Container.remove(int)
public void remove(int index)
Removes the Component
at the specified index. Updates the leftComponent
and rightComponent
instance variables as necessary, and then messages super.
remove
in class Container
index
- an integer specifying the component to remove, where 1 specifies the left/top component and 2 specifies the bottom/right componentContainer.add(java.awt.Component)
, Container.invalidate()
, Container.validate()
, Container.getComponentCount()
public void removeAll()
Removes all the child components from the split pane. Resets the leftComonent
and rightComponent
instance variables.
removeAll
in class Container
Container.add(java.awt.Component)
, Container.remove(int)
, Container.invalidate()
public boolean isValidateRoot()
Returns true, so that calls to revalidate
on any descendant of this JSplitPane
will cause a request to be queued that will validate the JSplitPane
and all its descendants.
isValidateRoot
in class JComponent
JComponent.revalidate()
, Container.isValidateRoot()
protected void addImpl(Component comp, Object constraints, int index)
Adds the specified component to this split pane. If constraints
identifies the left/top or right/bottom child component, and a component with that identifier was previously added, it will be removed and then comp
will be added in its place. If constraints
is not one of the known identifiers the layout manager may throw an IllegalArgumentException
.
The possible constraints objects (Strings) are:
constraints
object is null
, the component is added in the first available position (left/top if open, else right/bottom).addImpl
in class Container
comp
- the component to addconstraints
- an Object
specifying the layout constraints (position) for this componentindex
- an integer specifying the index in the container's list.IllegalArgumentException
- if the constraints
object does not match an existing componentContainer.addImpl(Component, Object, int)
protected void paintChildren(Graphics g)
Subclassed to message the UI with finishedPaintingChildren
after super has been messaged, as well as painting the border.
paintChildren
in class JComponent
g
- the Graphics
context within which to paintJComponent.paint(java.awt.Graphics)
, Container.paint(java.awt.Graphics)
protected String paramString()
Returns a string representation of this JSplitPane
. This method is intended to be used only for debugging purposes, and the content and format of the returned string may vary between implementations. The returned string may be empty but may not be null
.
paramString
in class JComponent
JSplitPane
.public AccessibleContext getAccessibleContext()
Gets the AccessibleContext associated with this JSplitPane. For split panes, the AccessibleContext takes the form of an AccessibleJSplitPane. A new AccessibleJSplitPane instance is created if necessary.
getAccessibleContext
in interface Accessible
getAccessibleContext
in class Component
© 1993–2017, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.