org.jdesktop.swingx
Class JXCollapsiblePane

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.JPanel
                  extended by org.jdesktop.swingx.JXPanel
                      extended by org.jdesktop.swingx.JXCollapsiblePane
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, Accessible, Scrollable

public class JXCollapsiblePane
extends JXPanel

JXCollapsiblePane provides a component which can collapse or expand its content area with animation and fade in/fade out effects. It also acts as a standard container for other Swing components.

The JXCollapsiblePane has a "content pane" that actually holds the displayed contents. This means that colors, fonts, and other display configuration items must be set on the content pane.


 // to set the font
 collapsiblePane.getContentPane().setFont(font);
 // to set the background color
 collapsiblePane.getContentPane().setBackground(Color.RED);
 
 
For convenience, the add and remove methods forward to the content pane. The following code shows to ways to add a child to the content pane.

 // to add a child
 collapsiblePane.getContentPane().add(component);
 // to add a child
 collapsiblePane.add(component);
 
 
To set the content pane, do not use add, use setContentPane(Container).

In this example, the JXCollapsiblePane is used to build a Search pane which can be shown and hidden on demand.

 
 JXCollapsiblePane cp = new JXCollapsiblePane();

 // JXCollapsiblePane can be used like any other container
 cp.setLayout(new BorderLayout());

 // the Controls panel with a textfield to filter the tree
 JPanel controls = new JPanel(new FlowLayout(FlowLayout.LEFT, 4, 0));
 controls.add(new JLabel("Search:"));
 controls.add(new JTextField(10));
 controls.add(new JButton("Refresh"));
 controls.setBorder(new TitledBorder("Filters"));
 cp.add("Center", controls);

 JXFrame frame = new JXFrame();
 frame.setLayout(new BorderLayout());

 // Put the "Controls" first
 frame.add("North", cp);

 // Then the tree - we assume the Controls would somehow filter the tree
 JScrollPane scroll = new JScrollPane(new JTree());
 frame.add("Center", scroll);

 // Show/hide the "Controls"
 JButton toggle = new JButton(cp.getActionMap().get(JXCollapsiblePane.TOGGLE_ACTION));
 toggle.setText("Show/Hide Search Panel");
 frame.add("South", toggle);

 frame.pack();
 frame.setVisible(true);
 
 

The JXCollapsiblePane has a default toggle action registered under the name TOGGLE_ACTION. Bind this action to a button and pressing the button will automatically toggle the pane between expanded and collapsed states. Additionally, you can define the icons to use through the EXPAND_ICON and COLLAPSE_ICON properties on the action. Example

 
 // get the built-in toggle action
 Action toggleAction = collapsible.getActionMap().
   get(JXCollapsiblePane.TOGGLE_ACTION);

 // use the collapse/expand icons from the JTree UI
 toggleAction.putValue(JXCollapsiblePane.COLLAPSE_ICON,
                       UIManager.getIcon("Tree.expandedIcon"));
 toggleAction.putValue(JXCollapsiblePane.EXPAND_ICON,
                       UIManager.getIcon("Tree.collapsedIcon"));
 
 

Note: JXCollapsiblePane requires its parent container to have a LayoutManager using getPreferredSize() when calculating its layout (example VerticalLayout, BorderLayout).

See Also:
Serialized Form
javabean.attribute
name="isContainer" value="Boolean.TRUE" rtexpr="true", name="containerDelegate" value="getContentPane"
javabean.class
name="JXCollapsiblePane" shortDescription="A pane which hides its content with an animation." stopClass="java.awt.Component"

Nested Class Summary
static interface JXCollapsiblePane.CollapsiblePaneContainer
          Tagging interface for containers in a JXCollapsiblePane hierarchy who needs to be revalidated (invalidate/validate/repaint) when the pane is expanding or collapsing.
static class JXCollapsiblePane.Direction
          The direction defines how the collapsible pane will collapse.
 
Nested classes/interfaces inherited from class javax.swing.JPanel
JPanel.AccessibleJPanel
 
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.BltBufferStrategy, Component.FlipBufferStrategy
 
Field Summary
static String ANIMATION_STATE_KEY
          Used when generating PropertyChangeEvents for the "animationState" property.
static String COLLAPSE_ICON
          The icon used by the "toggle" action when the JXCollapsiblePane is expanded, i.e the icon which indicates the pane can be collapsed.
static String EXPAND_ICON
          The icon used by the "toggle" action when the JXCollapsiblePane is collapsed, i.e the icon which indicates the pane can be expanded.
static String TOGGLE_ACTION
          JXCollapsible has a built-in toggle action which can be bound to buttons.
 
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
JXCollapsiblePane()
          Constructs a new JXCollapsiblePane with a JXPanel as content pane and a vertical VerticalLayout with a gap of 2 pixels as layout manager and a vertical orientation.
JXCollapsiblePane(JXCollapsiblePane.Direction direction)
          Constructs a new JXCollapsiblePane with a JXPanel as content pane and the specified direction.
JXCollapsiblePane(JXCollapsiblePane.Direction direction, LayoutManager layout)
          Constructs a new JXCollapsiblePane with a JPanel as content pane and the given LayoutManager and orientation.
JXCollapsiblePane(LayoutManager layout)
          Constructs a new JXCollapsiblePane with a JPanel as content pane and the given LayoutManager and a vertical orientation
 
Method Summary
protected  void addImpl(Component comp, Object constraints, int index)
          Overriden to redirect call to the content pane.
 Border getBorder()
          Returns the border of this component or null if no border is currently set.
 Container getContentPane()
           
 JXCollapsiblePane.Direction getDirection()
           
 Dimension getMinimumSize()
          A collapsible pane always returns its preferred size for the minimum size to ensure that the collapsing happens correctly.
 Dimension getPreferredSize()
          The critical part of the animation of this JXCollapsiblePane relies on the calculation of its preferred size.
 boolean isAnimated()
           
 boolean isCollapsed()
           
 void remove(Component comp)
          Overriden to redirect call to the content pane
 void remove(int index)
          Overriden to redirect call to the content pane.
 void removeAll()
          Overriden to redirect call to the content pane.
 void setAnimated(boolean animated)
          If true, enables the animation when pane is collapsed/expanded.
 void setBorder(Border border)
          Sets the border of this component.
 void setCollapsed(boolean val)
          Expands or collapses this JXCollapsiblePane.
 void setContentPane(Container contentPanel)
          Sets the content pane of this JXCollapsiblePane.
 void setDirection(JXCollapsiblePane.Direction direction)
          Changes the direction of this collapsible pane.
 void setLayout(LayoutManager mgr)
          Overriden to redirect call to the content pane.
 void setMinimumSize(Dimension minimumSize)
          Forwards to the content pane.
 void setPreferredSize(Dimension preferredSize)
          Sets the preferred size of this component.
 
Methods inherited from class org.jdesktop.swingx.JXPanel
getAlpha, getBackgroundPainter, getEffectiveAlpha, getPreferredScrollableViewportSize, getScrollableBlockIncrement, getScrollableTracksViewportHeight, getScrollableTracksViewportWidth, getScrollableUnitIncrement, isInheritAlpha, isPaintBorderInsets, paint, paintComponent, setAlpha, setBackground, setBackgroundPainter, setInheritAlpha, setPaintBorderInsets, setScrollableTracksViewportHeight, setScrollableTracksViewportWidth
 
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, 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, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getNextFocusableComponent, getPopupLocation, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintBorder, paintChildren, 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, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setNextFocusableComponent, setOpaque, 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, transferFocusBackward, 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, transferFocusUpCycle
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

ANIMATION_STATE_KEY

public static final String ANIMATION_STATE_KEY
Used when generating PropertyChangeEvents for the "animationState" property. The PropertyChangeEvent will takes the following different values for PropertyChangeEvent.getNewValue():

See Also:
Constant Field Values

TOGGLE_ACTION

public static final String TOGGLE_ACTION
JXCollapsible has a built-in toggle action which can be bound to buttons. Accesses the action through collapsiblePane.getActionMap().get(JXCollapsiblePane.TOGGLE_ACTION).

See Also:
Constant Field Values

COLLAPSE_ICON

public static final String COLLAPSE_ICON
The icon used by the "toggle" action when the JXCollapsiblePane is expanded, i.e the icon which indicates the pane can be collapsed.

See Also:
Constant Field Values

EXPAND_ICON

public static final String EXPAND_ICON
The icon used by the "toggle" action when the JXCollapsiblePane is collapsed, i.e the icon which indicates the pane can be expanded.

See Also:
Constant Field Values
Constructor Detail

JXCollapsiblePane

public JXCollapsiblePane()
Constructs a new JXCollapsiblePane with a JXPanel as content pane and a vertical VerticalLayout with a gap of 2 pixels as layout manager and a vertical orientation.


JXCollapsiblePane

public JXCollapsiblePane(JXCollapsiblePane.Direction direction)
Constructs a new JXCollapsiblePane with a JXPanel as content pane and the specified direction.

Parameters:
direction - the direction to collapse the container

JXCollapsiblePane

public JXCollapsiblePane(LayoutManager layout)
Constructs a new JXCollapsiblePane with a JPanel as content pane and the given LayoutManager and a vertical orientation


JXCollapsiblePane

public JXCollapsiblePane(JXCollapsiblePane.Direction direction,
                         LayoutManager layout)
Constructs a new JXCollapsiblePane with a JPanel as content pane and the given LayoutManager and orientation. A vertical orientation enables a vertical VerticalLayout with a gap of 2 pixels as layout manager. A horizontal orientation enables a horizontal HorizontalLayout with a gap of 2 pixels as layout manager

Parameters:
direction - the direction this pane collapses
layout - of this collapsible pane
Method Detail

setContentPane

public void setContentPane(Container contentPanel)
Sets the content pane of this JXCollapsiblePane. The contentPanel should implement Scrollable and return true from Scrollable.getScrollableTracksViewportHeight() and Scrollable.getScrollableTracksViewportWidth(). If the content pane fails to do so and a JScrollPane is added as a child, it is likely that the scroll pane will never correctly size. While it is not strictly necessary to implement Scrollable in this way, the default content pane does so.

Parameters:
contentPanel - the container delegate used to hold all of the contents for this collapsible pane
Throws:
IllegalArgumentException - if contentPanel is null

getContentPane

public Container getContentPane()
Returns:
the content pane

setLayout

public void setLayout(LayoutManager mgr)
Overriden to redirect call to the content pane.

Overrides:
setLayout in class Container
Parameters:
mgr - the specified layout manager
See Also:
Container.doLayout(), Container.getLayout()

addImpl

protected void addImpl(Component comp,
                       Object constraints,
                       int index)
Overriden to redirect call to the content pane.

Overrides:
addImpl in class Container
Parameters:
comp - the component to be added
constraints - an object expressing layout constraints for this component
index - the position in the container's list at which to insert the component, where -1 means append to the end
See Also:
Container.add(Component), Container.add(Component, int), Container.add(Component, java.lang.Object), LayoutManager, LayoutManager2

remove

public void remove(Component comp)
Overriden to redirect call to the content pane

Overrides:
remove in class Container
Parameters:
comp - the component to be removed
See Also:
Container.add(java.awt.Component), Container.remove(int)

remove

public void remove(int index)
Overriden to redirect call to the content pane.

Overrides:
remove in class Container
Parameters:
index - the index of the component to be removed
See Also:
Container.add(java.awt.Component)

removeAll

public void removeAll()
Overriden to redirect call to the content pane.

Overrides:
removeAll in class Container
See Also:
Container.add(java.awt.Component), Container.remove(int)

setAnimated

public void setAnimated(boolean animated)
If true, enables the animation when pane is collapsed/expanded. If false, animation is turned off.

When animated, the JXCollapsiblePane will progressively reduce (when collapsing) or enlarge (when expanding) the height of its content area until it becomes 0 or until it reaches the preferred height of the components it contains. The transparency of the content area will also change during the animation.

If not animated, the JXCollapsiblePane will simply hide (collapsing) or show (expanding) its content area.

Parameters:
animated -
javabean.property
bound="true" preferred="true"

isAnimated

public boolean isAnimated()
Returns:
true if the pane is animated, false otherwise
See Also:
setAnimated(boolean)

setDirection

public void setDirection(JXCollapsiblePane.Direction direction)
Changes the direction of this collapsible pane. Doing so changes the layout of the underlying content pane. If the chosen direction is vertical, a vertical layout with a gap of 2 pixels is chosen. Otherwise, a horizontal layout with a gap of 2 pixels is chosen.

Parameters:
direction - the new JXCollapsiblePane.Direction for this collapsible pane
Throws:
IllegalStateException - when this method is called while a collapsing/restore operation is running
See Also:
getDirection()
javabean.property
bound="true" preferred="true"

getDirection

public JXCollapsiblePane.Direction getDirection()
Returns:
the current JXCollapsiblePane.Direction.
See Also:
setDirection(Direction)

isCollapsed

public boolean isCollapsed()
Returns:
true if the pane is collapsed, false if expanded

setCollapsed

public void setCollapsed(boolean val)
Expands or collapses this JXCollapsiblePane.

If the component is collapsed and val is false, then this call expands the JXCollapsiblePane, such that the entire JXCollapsiblePane will be visible. If isAnimated() returns true, the expansion will be accompanied by an animation.

However, if the component is expanded and val is true, then this call collapses the JXCollapsiblePane, such that the entire JXCollapsiblePane will be invisible. If isAnimated() returns true, the collapse will be accompanied by an animation.

See Also:
isAnimated(), setAnimated(boolean)
javabean.property
bound="true" preferred="true"

getBorder

public Border getBorder()
Returns the border of this component or null if no border is currently set.

Overrides:
getBorder in class JComponent
Returns:
the border object for this component
See Also:
JComponent.setBorder(javax.swing.border.Border)

setBorder

public void setBorder(Border border)
Sets the border of this component. The Border object is responsible for defining the insets for the component (overriding any insets set directly on the component) and for optionally rendering any border decorations within the bounds of those insets. Borders should be used (rather than insets) for creating both decorative and non-decorative (such as margins and padding) regions for a swing component. Compound borders can be used to nest multiple borders within a single component.

Although technically you can set the border on any object that inherits from JComponent, the look and feel implementation of many standard Swing components doesn't work well with user-set borders. In general, when you want to set a border on a standard Swing component other than JPanel or JLabel, we recommend that you put the component in a JPanel and set the border on the JPanel.

This is a bound property.

Overrides:
setBorder in class JComponent
Parameters:
border - the border to be rendered for this component
See Also:
Border, CompoundBorder

getMinimumSize

public Dimension getMinimumSize()
A collapsible pane always returns its preferred size for the minimum size to ensure that the collapsing happens correctly.

To query the minimum size of the contents user getContentPane().getMinimumSize().

Overrides:
getMinimumSize in class JComponent
Returns:
the preferred size of the component
See Also:
JComponent.setMinimumSize(java.awt.Dimension), ComponentUI

setMinimumSize

public void setMinimumSize(Dimension minimumSize)
Forwards to the content pane.

Overrides:
setMinimumSize in class JComponent
Parameters:
minimumSize - the size to set on the content pane
See Also:
JComponent.getMinimumSize()

getPreferredSize

public Dimension getPreferredSize()
The critical part of the animation of this JXCollapsiblePane relies on the calculation of its preferred size. During the animation, its preferred size (specially its height) will change, when expanding, from 0 to the preferred size of the content pane, and the reverse when collapsing.

Overrides:
getPreferredSize in class JComponent
Returns:
this component preferred size
See Also:
JComponent.setPreferredSize(java.awt.Dimension), ComponentUI

setPreferredSize

public void setPreferredSize(Dimension preferredSize)
Description copied from class: javax.swing.JComponent
Sets the preferred size of this component. If preferredSize is null, the UI will be asked for the preferred size.

Overrides:
setPreferredSize in class JComponent
Parameters:
preferredSize - The new preferred size, or null
See Also:
Component.getPreferredSize(), Component.isPreferredSizeSet()