Class JXCollapsiblePane

  • All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.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
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      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

        javax.swing.JPanel.AccessibleJPanel
      • 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 Description
      static java.lang.String ANIMATION_STATE_KEY
      Used when generating PropertyChangeEvents for the "animationState" property.
      static java.lang.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 java.lang.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 java.lang.String TOGGLE_ACTION
      JXCollapsible has a built-in toggle action which can be bound to buttons.
      • Fields inherited from class javax.swing.JComponent

        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

        accessibleContext, 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 Description
      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​(java.awt.LayoutManager layout)
      Constructs a new JXCollapsiblePane with a JPanel as content pane and the given LayoutManager 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, java.awt.LayoutManager layout)
      Constructs a new JXCollapsiblePane with a JPanel as content pane and the given LayoutManager and orientation.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void addImpl​(java.awt.Component comp, java.lang.Object constraints, int index)
      Overriden to redirect call to the content pane.
      javax.swing.border.Border getBorder()
      java.awt.Container getContentPane()  
      JXCollapsiblePane.Direction getDirection()  
      java.awt.Dimension getMinimumSize()
      java.awt.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​(int index)
      Overriden to redirect call to the content pane.
      void remove​(java.awt.Component comp)
      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​(javax.swing.border.Border border)
      void setCollapsed​(boolean val)
      Expands or collapses this JXCollapsiblePane.
      void setContentPane​(java.awt.Container contentPanel)
      Sets the content pane of this JXCollapsiblePane.
      void setDirection​(JXCollapsiblePane.Direction direction)
      Changes the direction of this collapsible pane.
      void setLayout​(java.awt.LayoutManager mgr)
      Overriden to redirect call to the content pane.
      void setPreferredSize​(java.awt.Dimension preferredSize)  
      • 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, getBaseline, getBaselineResizeBehavior, 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, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, 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, setBackground, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, 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, 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, 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, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, 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

      • ANIMATION_STATE_KEY

        public static final java.lang.String ANIMATION_STATE_KEY
        Used when generating PropertyChangeEvents for the "animationState" property. The PropertyChangeEvent will takes the following different values for PropertyChangeEvent.getNewValue():
        • reinit every time the animation starts
        • expanded when the animation ends and the pane is expanded
        • collapsed when the animation ends and the pane is collapsed
        See Also:
        Constant Field Values
      • TOGGLE_ACTION

        public static final java.lang.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 java.lang.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 java.lang.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​(java.awt.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,
                                 java.awt.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​(java.awt.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:
        java.lang.IllegalArgumentException - if contentPanel is null
      • getContentPane

        public java.awt.Container getContentPane()
        Returns:
        the content pane
      • setLayout

        public void setLayout​(java.awt.LayoutManager mgr)
        Overriden to redirect call to the content pane.
        Overrides:
        setLayout in class java.awt.Container
      • addImpl

        protected void addImpl​(java.awt.Component comp,
                               java.lang.Object constraints,
                               int index)
        Overriden to redirect call to the content pane.
        Overrides:
        addImpl in class java.awt.Container
      • remove

        public void remove​(java.awt.Component comp)
        Overriden to redirect call to the content pane
        Overrides:
        remove in class java.awt.Container
      • remove

        public void remove​(int index)
        Overriden to redirect call to the content pane.
        Overrides:
        remove in class java.awt.Container
      • removeAll

        public void removeAll()
        Overriden to redirect call to the content pane.
        Overrides:
        removeAll in class java.awt.Container
      • 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 -
      • 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:
        java.lang.IllegalStateException - when this method is called while a collapsing/restore operation is running
        See Also:
        getDirection()
      • getDirection

        public JXCollapsiblePane.Direction getDirection()
        Returns:
        the current Orientation
        See Also:
        #setOrientation(Orientation)
      • 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)
      • getBorder

        public javax.swing.border.Border getBorder()
        Overrides:
        getBorder in class javax.swing.JComponent
      • setBorder

        public void setBorder​(javax.swing.border.Border border)
        Overrides:
        setBorder in class javax.swing.JComponent
      • getMinimumSize

        public java.awt.Dimension getMinimumSize()
        Overrides:
        getMinimumSize in class javax.swing.JComponent
      • getPreferredSize

        public java.awt.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 javax.swing.JComponent
        Returns:
        this component preferred size
      • setPreferredSize

        public void setPreferredSize​(java.awt.Dimension preferredSize)
        Overrides:
        setPreferredSize in class javax.swing.JComponent