Class JXTableHeader

  • All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.util.EventListener, javax.accessibility.Accessible, javax.swing.event.TableColumnModelListener, TableColumnModelExtListener

    public class JXTableHeader
    extends javax.swing.table.JTableHeader
    implements TableColumnModelExtListener
    TableHeader with extended functionality if associated Table is of type JXTable.

    The enhancements:

    • supports pluggable handler to control user interaction for sorting. The default handler toggles sort order on mouseClicked on the header of the column to sort. On shift-mouseClicked, it resets any column sorting. Both are done by invoking the corresponding methods of JXTable, toggleSortOrder(int) and resetSortOrder()
    • uses ColumnHeaderRenderer which can show the sort icon
    • triggers column pack (== auto-resize to exactly fit the contents) on double-click in resize region.
    • auto-scrolls if column is dragged outside visible rectangle. This feature is enabled if the autoscrolls property is true. The default is false (because of Issue #788-swingx which still isn't fixed for jdk1.6).
    • listens to TableColumn propertyChanges to update itself accordingly.
    See Also:
    ColumnHeaderRenderer, JXTable.toggleSortOrder(int), JXTable.resetSortOrder(), Serialized Form
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class Description
      static class  JXTableHeader.SortGestureRecognizer
      Encapsulates decision about which MouseEvents should trigger sort/unsort events.
      • Nested classes/interfaces inherited from class javax.swing.table.JTableHeader

        javax.swing.table.JTableHeader.AccessibleJTableHeader
      • 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 inherited from class javax.swing.table.JTableHeader

        columnModel, draggedColumn, draggedDistance, reorderingAllowed, resizingAllowed, resizingColumn, table, updateTableInRealTime
      • 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
      JXTableHeader()
      Constructs a JTableHeader with a default TableColumnModel.
      JXTableHeader​(javax.swing.table.TableColumnModel columnModel)
      Constructs a JTableHeader which is initialized with cm as the column model.
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      void columnPropertyChange​(java.beans.PropertyChangeEvent event)
      Implementing TableColumnModelExt: listening to column property changes.
      protected JXTableHeader.SortGestureRecognizer createSortGestureRecognizer()
      creates and returns the default SortGestureRecognizer.
      javax.swing.table.TableCellRenderer getCellRenderer​(int columnIndex)
      Returns the TableCellRenderer used for rendering the headerCell of the column at columnIndex.
      protected java.lang.String getColumnToolTipText​(java.awt.event.MouseEvent event)  
      javax.swing.table.TableColumn getDraggedColumn()
      Returns the the dragged column if and only if, a drag is in process and the column is visible, otherwise returns null.
      protected int getMinimumHeight​(int height)
      Allows to enforce a minimum heigth in the getXXSize methods.
      java.awt.Dimension getPreferredSize()
      Overridden to adjust for a minimum height as returned by #getMinimumHeight.
      protected java.awt.Dimension getPreferredSize​(java.awt.Dimension pref)
      Hack around #334-swingx: super doesnt measure all headerRenderers for prefSize.
      JXTableHeader.SortGestureRecognizer getSortGestureRecognizer()
      Lazily creates and returns the SortGestureRecognizer.
      java.lang.String getToolTipText​(java.awt.event.MouseEvent event)
      overridden to respect the column tooltip, if available.
      JXTable getXTable()  
      protected void installHeaderListener()  
      protected boolean isColumnEvent​(java.beans.PropertyChangeEvent event)  
      protected void postUpdateRendererUI​(javax.swing.table.TableCellRenderer oldRenderer)
      Cleans up after the UIDelegate has updated the default renderer.
      protected javax.swing.table.TableCellRenderer preUpdateRendererUI()
      Prepares the default renderer and internal state for updateUI.
      void setDraggedDistance​(int distance)
      void setSortGestureRecognizer​(JXTableHeader.SortGestureRecognizer recognizer)
      Set the SortGestureRecognizer for use in the HeaderListener.
      void setTable​(javax.swing.JTable table)
      Sets the associated JTable.
      protected void uninstallHeaderListener()  
      void updateUI()
      • Methods inherited from class javax.swing.table.JTableHeader

        columnAdded, columnAtPoint, columnMarginChanged, columnMoved, columnRemoved, columnSelectionChanged, createDefaultColumnModel, createDefaultRenderer, getAccessibleContext, getColumnModel, getDefaultRenderer, getDraggedDistance, getHeaderRect, getReorderingAllowed, getResizingAllowed, getResizingColumn, getTable, getUI, getUIClassID, getUpdateTableInRealTime, initializeLocalVars, paramString, resizeAndRepaint, setColumnModel, setDefaultRenderer, setDraggedColumn, setReorderingAllowed, setResizingAllowed, setResizingColumn, setUI, setUpdateTableInRealTime
      • 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, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, 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, addImpl, 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, remove, remove, removeAll, 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, 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
      • Methods inherited from interface javax.swing.event.TableColumnModelListener

        columnAdded, columnMarginChanged, columnMoved, columnRemoved, columnSelectionChanged
    • Constructor Detail

      • JXTableHeader

        public JXTableHeader()
        Constructs a JTableHeader with a default TableColumnModel.
        See Also:
        JTableHeader.createDefaultColumnModel()
      • JXTableHeader

        public JXTableHeader​(javax.swing.table.TableColumnModel columnModel)
        Constructs a JTableHeader which is initialized with cm as the column model. If cm is null this method will initialize the table header with a default TableColumnModel.
        Parameters:
        columnModel - the column model for the table
        See Also:
        JTableHeader.createDefaultColumnModel()
    • Method Detail

      • setTable

        public void setTable​(javax.swing.JTable table)
        Sets the associated JTable. Enables enhanced header features if table is of type JXTable.

        PENDING: who is responsible for synching the columnModel?

        Overrides:
        setTable in class javax.swing.table.JTableHeader
      • columnPropertyChange

        public void columnPropertyChange​(java.beans.PropertyChangeEvent event)
        Implementing TableColumnModelExt: listening to column property changes. Here: triggers a resizeAndRepaint on every propertyChange which doesn't already fire a "normal" columnModelEvent.
        Specified by:
        columnPropertyChange in interface TableColumnModelExtListener
        Parameters:
        event - change notification from a contained TableColumn.
        See Also:
        isColumnEvent(PropertyChangeEvent)
      • isColumnEvent

        protected boolean isColumnEvent​(java.beans.PropertyChangeEvent event)
        Parameters:
        event - the PropertyChangeEvent received as TableColumnModelExtListener.
        Returns:
        a boolean to decide whether the same event triggers a base columnModelEvent.
      • getToolTipText

        public java.lang.String getToolTipText​(java.awt.event.MouseEvent event)
        overridden to respect the column tooltip, if available.
        Overrides:
        getToolTipText in class javax.swing.table.JTableHeader
        Returns:
        the column tooltip of the column at the mouse position if not null or super if not available.
      • getColumnToolTipText

        protected java.lang.String getColumnToolTipText​(java.awt.event.MouseEvent event)
        Parameters:
        event - the mouseEvent representing the mouse location.
        Returns:
        the column tooltip of the column below the mouse location, or null if not available.
      • getXTable

        public JXTable getXTable()
      • getCellRenderer

        public javax.swing.table.TableCellRenderer getCellRenderer​(int columnIndex)
        Returns the TableCellRenderer used for rendering the headerCell of the column at columnIndex.
        Parameters:
        columnIndex - the index of the column
        Returns:
        the renderer.
      • getPreferredSize

        public java.awt.Dimension getPreferredSize()
        Overridden to adjust for a minimum height as returned by #getMinimumHeight.
        Overrides:
        getPreferredSize in class javax.swing.table.JTableHeader
      • getPreferredSize

        protected java.awt.Dimension getPreferredSize​(java.awt.Dimension pref)
        Hack around #334-swingx: super doesnt measure all headerRenderers for prefSize. This hack does and adjusts the height of the given Dimension to be equal to the max fo all renderers.
        Parameters:
        pref - the adjusted preferred size respecting all renderers size requirements.
      • getMinimumHeight

        protected int getMinimumHeight​(int height)
        Allows to enforce a minimum heigth in the getXXSize methods. Here: jumps in if the input height is 0, then measures the cell renderer component with a dummy value.
        Parameters:
        height - the prefHeigth as calcualated by super.
        Returns:
        a minimum height for the preferredSize.
      • preUpdateRendererUI

        protected javax.swing.table.TableCellRenderer preUpdateRendererUI()
        Prepares the default renderer and internal state for updateUI. Returns the default renderer set when entering this method. Called from updateUI before calling super.updateUI to allow UIDelegate to cleanup, if necessary. This implementation does so by restoring the header's default renderer to the ColumnHeaderRenderer's delegate.
        Returns:
        the current default renderer
        See Also:
        updateUI()
      • postUpdateRendererUI

        protected void postUpdateRendererUI​(javax.swing.table.TableCellRenderer oldRenderer)
        Cleans up after the UIDelegate has updated the default renderer. Called from updateUI after calling super.updateUI. This implementation wraps a UIResource default renderer into a ColumnHeaderRenderer.
        Parameters:
        oldRenderer - the default renderer before updateUI
        See Also:
        updateUI()
      • setDraggedDistance

        public void setDraggedDistance​(int distance)

        Overridden to scroll the table to keep the dragged column visible. This side-effect is enabled only if the header's autoscroll property is true and the associated table is of type JXTable.

        The autoscrolls is disabled by default. With or without - core issue #6503981 has weird effects (for jdk 1.6 - 1.6u3) on a plain JTable as well as a JXTable, fixed in 1.6u4.

        Overrides:
        setDraggedDistance in class javax.swing.table.JTableHeader
      • getDraggedColumn

        public javax.swing.table.TableColumn getDraggedColumn()
        Returns the the dragged column if and only if, a drag is in process and the column is visible, otherwise returns null.
        Overrides:
        getDraggedColumn in class javax.swing.table.JTableHeader
        Returns:
        the dragged column, if a drag is in process and the column is visible, otherwise returns null
        See Also:
        JTableHeader.getDraggedDistance()
      • getSortGestureRecognizer

        public JXTableHeader.SortGestureRecognizer getSortGestureRecognizer()
        Lazily creates and returns the SortGestureRecognizer.
        Returns:
        the SortGestureRecognizer used in Headerlistener.
      • setSortGestureRecognizer

        public void setSortGestureRecognizer​(JXTableHeader.SortGestureRecognizer recognizer)
        Set the SortGestureRecognizer for use in the HeaderListener.
        Parameters:
        recognizer - the recognizer to use in HeaderListener.
      • createSortGestureRecognizer

        protected JXTableHeader.SortGestureRecognizer createSortGestureRecognizer()
        creates and returns the default SortGestureRecognizer.
        Returns:
        the SortGestureRecognizer used in Headerlistener.
      • installHeaderListener

        protected void installHeaderListener()
      • uninstallHeaderListener

        protected void uninstallHeaderListener()