Package org.jdesktop.swingx
Class JXTableHeader
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- javax.swing.table.JTableHeader
-
- org.jdesktop.swingx.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)
andresetSortOrder()
- 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.
-
-
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
-
-
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
-
-
Constructor Summary
Constructors Constructor Description JXTableHeader()
Constructs aJTableHeader
with a defaultTableColumnModel
.JXTableHeader(javax.swing.table.TableColumnModel columnModel)
Constructs aJTableHeader
which is initialized withcm
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 returnsnull
.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
-
-
-
-
Constructor Detail
-
JXTableHeader
public JXTableHeader()
Constructs aJTableHeader
with a defaultTableColumnModel
.- See Also:
JTableHeader.createDefaultColumnModel()
-
JXTableHeader
public JXTableHeader(javax.swing.table.TableColumnModel columnModel)
Constructs aJTableHeader
which is initialized withcm
as the column model. Ifcm
isnull
this method will initialize the table header with a defaultTableColumnModel
.- 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 classjavax.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 interfaceTableColumnModelExtListener
- 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 classjavax.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 classjavax.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.
-
updateUI
public void updateUI()
Overridden to update the default renderer.
- Overrides:
updateUI
in classjavax.swing.table.JTableHeader
- See Also:
preUpdateRendererUI()
,postUpdateRendererUI(TableCellRenderer)
,ColumnHeaderRenderer
-
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 theColumnHeaderRenderer
'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 fromupdateUI
after callingsuper.updateUI
. This implementation wraps aUIResource
default renderer into aColumnHeaderRenderer
.- 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 classjavax.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 returnsnull
.- Overrides:
getDraggedColumn
in classjavax.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()
-
-