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 classJXTableHeader.SortGestureRecognizerEncapsulates 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 aJTableHeaderwith a defaultTableColumnModel.JXTableHeader(javax.swing.table.TableColumnModel columnModel)Constructs aJTableHeaderwhich is initialized withcmas the column model.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcolumnPropertyChange(java.beans.PropertyChangeEvent event)Implementing TableColumnModelExt: listening to column property changes.protected JXTableHeader.SortGestureRecognizercreateSortGestureRecognizer()creates and returns the default SortGestureRecognizer.javax.swing.table.TableCellRenderergetCellRenderer(int columnIndex)Returns the TableCellRenderer used for rendering the headerCell of the column at columnIndex.protected java.lang.StringgetColumnToolTipText(java.awt.event.MouseEvent event)javax.swing.table.TableColumngetDraggedColumn()Returns the the dragged column if and only if, a drag is in process and the column is visible, otherwise returnsnull.protected intgetMinimumHeight(int height)Allows to enforce a minimum heigth in the getXXSize methods.java.awt.DimensiongetPreferredSize()Overridden to adjust for a minimum height as returned by #getMinimumHeight.protected java.awt.DimensiongetPreferredSize(java.awt.Dimension pref)Hack around #334-swingx: super doesnt measure all headerRenderers for prefSize.JXTableHeader.SortGestureRecognizergetSortGestureRecognizer()Lazily creates and returns the SortGestureRecognizer.java.lang.StringgetToolTipText(java.awt.event.MouseEvent event)overridden to respect the column tooltip, if available.JXTablegetXTable()protected voidinstallHeaderListener()protected booleanisColumnEvent(java.beans.PropertyChangeEvent event)protected voidpostUpdateRendererUI(javax.swing.table.TableCellRenderer oldRenderer)Cleans up after the UIDelegate has updated the default renderer.protected javax.swing.table.TableCellRendererpreUpdateRendererUI()Prepares the default renderer and internal state for updateUI.voidsetDraggedDistance(int distance)voidsetSortGestureRecognizer(JXTableHeader.SortGestureRecognizer recognizer)Set the SortGestureRecognizer for use in the HeaderListener.voidsetTable(javax.swing.JTable table)Sets the associated JTable.protected voiduninstallHeaderListener()voidupdateUI()-
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 aJTableHeaderwith a defaultTableColumnModel.- See Also:
JTableHeader.createDefaultColumnModel()
-
JXTableHeader
public JXTableHeader(javax.swing.table.TableColumnModel columnModel)
Constructs aJTableHeaderwhich is initialized withcmas the column model. Ifcmisnullthis 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:
setTablein 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:
columnPropertyChangein 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:
getToolTipTextin 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:
getPreferredSizein 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:
updateUIin 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 fromupdateUIafter callingsuper.updateUI. This implementation wraps aUIResourcedefault 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
trueand 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:
setDraggedDistancein 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:
getDraggedColumnin 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()
-
-