org.jdesktop.swingx
Class JXTableHeader

java.lang.Object
  extended by java.awt.Component
      extended by java.awt.Container
          extended by javax.swing.JComponent
              extended by javax.swing.table.JTableHeader
                  extended by org.jdesktop.swingx.JXTableHeader
All Implemented Interfaces:
ImageObserver, MenuContainer, Serializable, EventListener, Accessible, TableColumnModelListener, TableColumnModelExtListener

public class JXTableHeader
extends JTableHeader
implements TableColumnModelExtListener

TableHeader with extended functionality if associated Table is of type JXTable.

The enhancements:

See Also:
ColumnHeaderRenderer, JXTable.toggleSortOrder(int), JXTable.resetSortOrder(), Serialized Form

Nested Class Summary
static class JXTableHeader.SortGestureRecognizer
          Encapsulates decision about which MouseEvents should trigger sort/unsort events.
 
Nested classes/interfaces inherited from class javax.swing.table.JTableHeader
JTableHeader.AccessibleJTableHeader
 
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
 
Fields inherited from class javax.swing.table.JTableHeader
columnModel, draggedColumn, draggedDistance, reorderingAllowed, resizingAllowed, resizingColumn, table, updateTableInRealTime
 
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
JXTableHeader()
          Constructs a JTableHeader with a default TableColumnModel.
JXTableHeader(TableColumnModel columnModel)
          Constructs a JTableHeader which is initialized with cm as the column model.
 
Method Summary
 void columnPropertyChange(PropertyChangeEvent event)
          Implementing TableColumnModelExt: listening to column property changes.
protected  JXTableHeader.SortGestureRecognizer createSortGestureRecognizer()
          creates and returns the default SortGestureRecognizer.
 TableCellRenderer getCellRenderer(int columnIndex)
          Returns the TableCellRenderer used for rendering the headerCell of the column at columnIndex.
protected  String getColumnToolTipText(MouseEvent event)
           
 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.
 Dimension getPreferredSize()
          Overridden to adjust for a minimum height as returned by #getMinimumHeight.
protected  Dimension getPreferredSize(Dimension pref)
          Hack around #334-swingx: super doesnt measure all headerRenderers for prefSize.
 JXTableHeader.SortGestureRecognizer getSortGestureRecognizer()
          Lazily creates and returns the SortGestureRecognizer.
 String getToolTipText(MouseEvent event)
          overridden to respect the column tooltip, if available.
 JXTable getXTable()
           
protected  void installHeaderListener()
           
protected  boolean isColumnEvent(PropertyChangeEvent event)
           
protected  void postUpdateRendererUI(TableCellRenderer oldRenderer)
          Cleans up after the UIDelegate has updated the default renderer.
protected  TableCellRenderer preUpdateRendererUI()
          Prepares the default renderer and internal state for updateUI.
 void setDraggedDistance(int distance)
          Sets the header's draggedDistance to distance.
 void setSortGestureRecognizer(JXTableHeader.SortGestureRecognizer recognizer)
          Set the SortGestureRecognizer for use in the HeaderListener.
 void setTable(JTable table)
          Sets the associated JTable.
protected  void uninstallHeaderListener()
           
 void updateUI()
          Notification from the UIManager that the look and feel (L&F) has changed.
 
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, 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, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, 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, 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
 
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(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(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 JTableHeader
Parameters:
table - the new table

columnPropertyChange

public void columnPropertyChange(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(PropertyChangeEvent event)
Parameters:
event - the PropertyChangeEvent received as TableColumnModelExtListener.
Returns:
a boolean to decide whether the same event triggers a base columnModelEvent.

getToolTipText

public String getToolTipText(MouseEvent event)
overridden to respect the column tooltip, if available.

Overrides:
getToolTipText in class JTableHeader
Parameters:
event - the location of the event identifies the proper renderer and, therefore, the proper tip
Returns:
the column tooltip of the column at the mouse position if not null or super if not available.

getColumnToolTipText

protected String getColumnToolTipText(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 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 Dimension getPreferredSize()
Overridden to adjust for a minimum height as returned by #getMinimumHeight.

Overrides:
getPreferredSize in class JComponent
Returns:
the value of the preferredSize property
See Also:
JComponent.setPreferredSize(java.awt.Dimension), ComponentUI

getPreferredSize

protected Dimension getPreferredSize(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.

updateUI

public void updateUI()
Notification from the UIManager that the look and feel (L&F) has changed. Replaces the current UI object with the latest version from the UIManager.

Overridden to update the default renderer.

Overrides:
updateUI in class JTableHeader
See Also:
preUpdateRendererUI(), postUpdateRendererUI(TableCellRenderer), ColumnHeaderRenderer

preUpdateRendererUI

protected 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(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)
Sets the header's draggedDistance to 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 JTableHeader
Parameters:
distance - the distance dragged

getDraggedColumn

public 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 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()