Class JXTableHeader
- All Implemented Interfaces:
ImageObserver,MenuContainer,Serializable,EventListener,Accessible,TableColumnModelListener,TableColumnModelExtListener
Extended user interaction
- Supports column pack (== auto-resize to exactly fit the contents) on double-click in resize region.
- Configurable to resort a column on the second click of a mouseClicked event (feature request #271-swingx)
- Does its best to not sort if the mouse click happens in the resize region.
- Supports horizontal auto-scroll if a 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).
Extended functionality
- Listens to TableColumn propertyChanges to update itself accordingly.
- Supports per-column header ToolTips.
- Guarantees reasonable minimal height > 0 for header preferred height.
- Author:
- Jeanette Winzenburg
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class javax.swing.table.JTableHeader
JTableHeader.AccessibleJTableHeaderNested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponentNested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainerNested 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, updateTableInRealTimeFields inherited from class javax.swing.JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOWFields inherited from class java.awt.Component
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENTFields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH -
Constructor Summary
ConstructorsConstructorDescriptionConstructs aJTableHeaderwith a defaultTableColumnModel.JXTableHeader(TableColumnModel columnModel) Constructs aJTableHeaderwhich is initialized withcmas the column model. -
Method Summary
Modifier and TypeMethodDescriptionvoidImplements TableColumnModelExt to allow internal update after column property changes.protected PropertyChangeListenerCreates and returns the PropertyChangeListener to register on the owning table.getCellRenderer(int columnIndex) Returns the TableCellRenderer to use for the column with the given index.getColumnExt(Point point) Returns the tableColumn at the given location or null if the location is outside or the column is not of typeTableColumnExt.protected StringgetColumnToolTipText(MouseEvent event) Returns the column tooltip of the column at the position of the MouseEvent, if a tooltip is available.protected StringgetColumnToolTipText(TableColumnExt columnExt) Returns the column tooltip for the given column or null if none available.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) Returns a reasonable minimal preferred height for the header.getPopupLocation(MouseEvent event) Returns the location of the mouseEvent that triggered the showing of the ComponentPopupMenu.protected DimensiongetPreferredSize(Dimension pref) Returns a preferred size which is adjusted to the maximum of all header renderers' height requirement.booleanReturns the resortsOnDoubleClick property.protected PropertyChangeListenerReturns the PropertyChangeListener to register on the owning table, lazily created.getToolTipText(MouseEvent event) Returns the associated table if it is of type JXTable, or null if not.protected voidCreates and installs header listeners to service the extended functionality.protected voidInstalls the table.protected booleanisColumnEvent(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.voidsetDraggedColumn(TableColumn column) voidsetDraggedDistance(int distance) voidsetResizingColumn(TableColumn aColumn) voidsetResortsOnDoubleClick(boolean resortsOnDoubleClick) Sets the resortsOnDoubleClick property.voidprotected voidUninstalls header listeners to service the extended functionality.protected voidUninstalls the table.protected voidSynchs the header's enabled with the table's enabled property.protected voidupdatePopupTrigger(MouseEvent event) Handles internal bookkeeping related to popupLocation, called from getPopupLocation.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, setReorderingAllowed, setResizingAllowed, setUI, setUpdateTableInRealTime, updateUIMethods 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, 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, updateMethods 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, validateTreeMethods 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, transferFocusUpCycleMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface javax.swing.event.TableColumnModelListener
columnAdded, columnMarginChanged, columnMoved, columnRemoved, columnSelectionChanged
-
Constructor Details
-
JXTableHeader
public JXTableHeader()Constructs aJTableHeaderwith a defaultTableColumnModel.- See Also:
-
JXTableHeader
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:
-
-
Method Details
-
setTable
Sets the associated JTable. Enables enhanced header features if table is of type JXTable.
PENDING: who is responsible for synching the columnModel?
- Overrides:
setTablein classJTableHeader
-
installTable
protected void installTable()Installs the table.This implemenation synchs enabled state and installs the PropertyChangeListener.
-
updateEnabledFromTable
protected void updateEnabledFromTable()Synchs the header's enabled with the table's enabled property. -
uninstallTable
protected void uninstallTable()Uninstalls the table.This implementation uninstalls the PropertyChangeListener.
-
columnPropertyChange
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:
columnPropertyChangein interfaceTableColumnModelExtListener- Parameters:
event- change notification from a contained TableColumn.- See Also:
-
isColumnEvent
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.
-
getPopupLocation
Overridden for bookkeeping: the given event location is stored for later access.
- Overrides:
getPopupLocationin classJComponent- See Also:
-
updatePopupTrigger
Handles internal bookkeeping related to popupLocation, called from getPopupLocation.This implementation stores the mouse location as popupTriggerLocation.
- Parameters:
event- the event that triggered the showing of the componentPopup, might be null if triggered by keyboard
-
getPopupTriggerLocation
Returns the location of the mouseEvent that triggered the showing of the ComponentPopupMenu.- Returns:
- the location of the mouseEvent that triggered the last showing of the ComponentPopup, or null if it was triggered by keyboard.
-
getToolTipText
Overridden to respect the column tooltip, if available.
- Overrides:
getToolTipTextin classJTableHeader- Returns:
- the column tooltip of the column at the mouse position if not null or super if not available.
-
getColumnToolTipText
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.
-
getColumnToolTipText
Returns the column tooltip for the given column or null if none available.This implementation returns the toolTipText property of the given column.
- Parameters:
columnExt- the column to return the tooltip for, must not be null- Returns:
- the tooltip for the column or null if none available.
- See Also:
-
getColumnExt
Returns the tableColumn at the given location or null if the location is outside or the column is not of typeTableColumnExt.- Parameters:
point- the location to return the column for- Returns:
- the tableColumn at the location or null
-
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.
-
getResortsOnDoubleClick
public boolean getResortsOnDoubleClick()Returns the resortsOnDoubleClick property.- Returns:
- a flag indicating whether or not the second click in a mouseClicked event should toggle the sort order again.
- See Also:
-
setResortsOnDoubleClick
public void setResortsOnDoubleClick(boolean resortsOnDoubleClick) Sets the resortsOnDoubleClick property. If enabled, the second click of a mouseClicked event will toggle the sort order again if the column has been unsorted before. This is introduced to support feature request #271-swingx. It is effective only if the coupled table is of type JXTable and has full control about its RowSorter's properties. The default value is false.- Parameters:
resortsOnDoubleClick- a boolean indicating whether or not the second click in a mouseClicked event should resort the column.- See Also:
-
getCellRenderer
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
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:
getPreferredSizein classJTableHeader- See Also:
-
getPreferredSize
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:
-
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:
-
setDraggedColumn
Overridden to fire a propertyChange for draggedColumn.
- Overrides:
setDraggedColumnin classJTableHeader
-
setResizingColumn
Overridden to fire a propertyChange for resizingColumn.
- Overrides:
setResizingColumnin classJTableHeader
-
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 classJTableHeader
-
getDraggedColumn
Returns the the dragged column if and only if, a drag is in process and the column is visible, otherwise returnsnull.- Overrides:
getDraggedColumnin classJTableHeader- Returns:
- the dragged column, if a drag is in process and the column is
visible, otherwise returns
null - See Also:
-
getTablePropertyChangeListener
Returns the PropertyChangeListener to register on the owning table, lazily created.- Returns:
- the PropertyChangeListener to use on the owning table.
-
createTablePropertyChangeListener
Creates and returns the PropertyChangeListener to register on the owning table.This implementation synchs the header's enabled properties with the table's enabled.
- Returns:
- the PropertyChangeListener to register on the owning table.
-
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.
-