swingx
Version 2009-07-31

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.

Extended user interaction

Extended functionality

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

Nested Class Summary
static class JXTableHeader.SortGestureRecognizer
          Deprecated. no longer used internally - keep until we know better how to meet our requirments in Mustang
 
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.BaselineResizeBehavior, 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)
          Implements TableColumnModelExt to allow internal update after column property changes.
protected  JXTableHeader.SortGestureRecognizer createSortGestureRecognizer()
          Deprecated. no longer used internally - keep until we know better how to meet our requirments in Mustang
 TableCellRenderer getCellRenderer(int columnIndex)
          Returns the TableCellRenderer to use for the column with the given index.
protected  String getColumnToolTipText(MouseEvent event)
          Returns the column tooltip of the column at the position of the MouseEvent, if a tooltip is available.
 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)
          Returns a reasonable minimal preferred height for the header.
 Dimension getPreferredSize()
           Overridden to adjust for a reasonable minimum height.
protected  Dimension getPreferredSize(Dimension pref)
          Returns a preferred size which is adjusted to the maximum of all header renderers' height requirement.
 JXTableHeader.SortGestureRecognizer getSortGestureRecognizer()
          Deprecated. no longer used internally - keep until we know better how to meet our requirments in Mustang
 String getToolTipText(MouseEvent event)
           Overridden to respect the column tooltip, if available.
 JXTable getXTable()
          Returns the associated table if it is of type JXTable, or null if not.
protected  void installHeaderListener()
          Creates and installs header listeners to service the extended functionality.
protected  boolean isColumnEvent(PropertyChangeEvent event)
          Returns a boolean indicating if a property change event received from column changes is expected to be already broadcasted by the core TableColumnModel.
 void setDraggedDistance(int distance)
           Overridden to scroll the table to keep the dragged column visible.
 void setSortGestureRecognizer(JXTableHeader.SortGestureRecognizer recognizer)
          Deprecated. no longer used internally - keep until we know better how to meet our requirments in Mustang
 void setTable(JTable table)
           Sets the associated JTable.
protected  void uninstallHeaderListener()
          Uninstalls header listeners to service the extended functionality.
 
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, 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, 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, isPaintingForPrint, 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

columnPropertyChange

public void columnPropertyChange(PropertyChangeEvent event)
Implements TableColumnModelExt to allow internal update after column property changes.

This implementation 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), TableColumnModelExtListener

isColumnEvent

protected boolean isColumnEvent(PropertyChangeEvent event)
Returns a boolean indicating if a property change event received from column changes is expected to be already broadcasted by the core TableColumnModel.

This implementation returns true for notification of width, preferredWidth and visible properties, false otherwise.

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
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)
Returns the column tooltip of the column at the position of the MouseEvent, if a tooltip is available.

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()
Returns the associated table if it is of type JXTable, or null if not.

Returns:
the associated table if of type JXTable or null if not.

getCellRenderer

public TableCellRenderer getCellRenderer(int columnIndex)
Returns the TableCellRenderer to use for the column with the given index. This implementation returns the column's header renderer if available or this header's default renderer if not.

Parameters:
columnIndex - the index in view coordinates of the column
Returns:
the renderer to use for the column, guaranteed to be not null.

getPreferredSize

public Dimension getPreferredSize()

Overridden to adjust for a reasonable minimum height. Done to fix Issue 334-swingx, which actually is a core issue misbehaving in returning a zero height if the first column has no text.

Overrides:
getPreferredSize in class JComponent
See Also:
getPreferredSize(Dimension), getMinimumHeight(int).

getPreferredSize

protected Dimension getPreferredSize(Dimension pref)
Returns a preferred size which is adjusted to the maximum of all header renderers' height requirement.

Parameters:
pref - an initial preferred size
Returns:
the initial preferred size with its height property adjusted to the maximum of all renderers preferred height requirement.
See Also:
getPreferredSize(), getMinimumHeight(int)

getMinimumHeight

protected int getMinimumHeight(int height)
Returns a reasonable minimal preferred height for the header. This is meant as a last straw if all header values are null, renderers report 0 as their preferred height.

This implementation returns the default header renderer's preferred height as measured with a dummy value if the input height is 0, otherwise returns the height unchanged.

Parameters:
height - the initial height.
Returns:
a reasonable minimal preferred height.
See Also:
getPreferredSize(), getPreferredSize(Dimension)

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 JTableHeader

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

installHeaderListener

protected void installHeaderListener()
Creates and installs header listeners to service the extended functionality. This implementation creates and installs a custom mouse input listener.


uninstallHeaderListener

protected void uninstallHeaderListener()
Uninstalls header listeners to service the extended functionality. This implementation uninstalls a custom mouse input listener.


getSortGestureRecognizer

@Deprecated
public JXTableHeader.SortGestureRecognizer getSortGestureRecognizer()
Deprecated. no longer used internally - keep until we know better how to meet our requirments in Mustang

Returns the SortGestureRecognizer to use. If none available, lazily creates a default.

Returns:
the SortGestureRecognizer to use for interpreting mouse events as sort gestures.
See Also:
setSortGestureRecognizer(SortGestureRecognizer), createSortGestureRecognizer()

setSortGestureRecognizer

@Deprecated
public void setSortGestureRecognizer(JXTableHeader.SortGestureRecognizer recognizer)
Deprecated. no longer used internally - keep until we know better how to meet our requirments in Mustang

Sets the SortGestureRecognizer to use for interpreting mouse events as sort gestures. If null, a default as returned by createSortGestureRecognizer is used.

This is a bound property.

Parameters:
recognizer - the SortGestureRecognizer to use for interpreting mouse events as sort gestures
See Also:
getSortGestureRecognizer(), createSortGestureRecognizer()

createSortGestureRecognizer

@Deprecated
protected JXTableHeader.SortGestureRecognizer createSortGestureRecognizer()
Deprecated. no longer used internally - keep until we know better how to meet our requirments in Mustang

Creates and returns the default SortGestureRecognizer.

Returns:
the default SortGestureRecognizer to use for interpreting mouse events as sort gestures.
See Also:
getSortGestureRecognizer(), setSortGestureRecognizer(SortGestureRecognizer)

swingx
Version 2009-07-31