Class ColumnControlButton
- All Implemented Interfaces:
ImageObserver,ItemSelectable,MenuContainer,Serializable,Accessible,SwingConstants
JXTable's
columns.
It's main purpose is to allow toggling of table columns' visibility.
Additionally, arbitrary configuration actions can be exposed.
This component is installed in the JXTable's
trailing corner, if enabled:
table.setColumnControlVisible(true);
From the perspective of a JXTable, the component's behaviour is
opaque. Typically, the button's action is to popup a component for user
interaction.
This class is responsible for handling/providing/updating the lists of
actions and to keep each Action's state in synch with Table-/Column state.
The visible behaviour of the popup is delegated to a
ColumnControlPopup.
Default support for adding table (configuration or other) Actions is
informal, driven by convention:
- the JXTable's actionMap is scanned for candidate actions, the default marker
is a key of type String which starts with
ColumnControlButton.COLUMN_CONTROL_MARKER - the actions are sorted by that key and then handed over to the ColumnControlPopup for binding and addition of appropriate menu items
- the addition as such is control by additionalActionsVisible property, its default value is true
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionclassA specializedActionwhich takes care of keeping in synch with TableColumn state.classA default implementation of ColumnControlPopup.Nested classes/interfaces inherited from class javax.swing.JButton
JButton.AccessibleJButtonNested classes/interfaces inherited from class javax.swing.AbstractButton
AbstractButton.AccessibleAbstractButton, AbstractButton.ButtonChangeListenerNested 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
FieldsModifier and TypeFieldDescriptionstatic final Stringthe key for looking up the control's icon in the UIManager.static final Stringthe key for looking up the control's margin in the UIManager.static final StringMarker to auto-recognize actions which should be added to the popup.protected ColumnControlPopupexposed for testing.Fields inherited from class javax.swing.AbstractButton
actionListener, BORDER_PAINTED_CHANGED_PROPERTY, changeEvent, changeListener, CONTENT_AREA_FILLED_CHANGED_PROPERTY, DISABLED_ICON_CHANGED_PROPERTY, DISABLED_SELECTED_ICON_CHANGED_PROPERTY, FOCUS_PAINTED_CHANGED_PROPERTY, HORIZONTAL_ALIGNMENT_CHANGED_PROPERTY, HORIZONTAL_TEXT_POSITION_CHANGED_PROPERTY, ICON_CHANGED_PROPERTY, itemListener, MARGIN_CHANGED_PROPERTY, MNEMONIC_CHANGED_PROPERTY, model, MODEL_CHANGED_PROPERTY, PRESSED_ICON_CHANGED_PROPERTY, ROLLOVER_ENABLED_CHANGED_PROPERTY, ROLLOVER_ICON_CHANGED_PROPERTY, ROLLOVER_SELECTED_ICON_CHANGED_PROPERTY, SELECTED_ICON_CHANGED_PROPERTY, TEXT_CHANGED_PROPERTY, VERTICAL_ALIGNMENT_CHANGED_PROPERTY, VERTICAL_TEXT_POSITION_CHANGED_PROPERTYFields 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, WIDTHFields inherited from interface javax.swing.SwingConstants
BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST -
Constructor Summary
ConstructorsConstructorDescriptionColumnControlButton(JXTable table) Creates a column control button for the table.ColumnControlButton(JXTable table, Icon icon) Creates a column control button for the table. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidAdds additional actions to the popup, if additionalActionsVisible is true, does nothing otherwise.protected voidAdds visibility actions into the popup view.voidprotected booleanMethod to check if we can control column visibility POST: if true we can be sure to have an extended TableColumnModelprotected voidclearAll()removes all components from the popup, making sure to release all columnVisibility actions.protected voidReleases actions and clears list of actions.protected ColumnControlPopupFactory method to return aColumnControlPopup.protected TableColumnModelListenerCreates the listener to columnModel.Creates and returns aColumnVisibilityActionfor the givenTableColumn.protected PropertyChangeListenerCreates the listener to table's property changes.protected voidCreates and adds a ColumnVisiblityAction for every column that should be togglable via the column control.creates and returns a list of additional Actions to add to the popup.booleanReturns the actionsVisible property which controls whether or not additional table Actions should be included into the popup.protected ListLooks up and returns action keys to access actions in the table's actionMap which should be included into the popup.protected ColumnControlPopupReturns to popup component for user interaction.protected TableColumnModelListenerReturns the listener to table's column model.protected List<ColumnControlButton.ColumnVisibilityAction>Lazyly creates and returns the List of visibility actions.protected PropertyChangeListenerReturns the listener to table's property changes.protected booleanisColumnControlActionKey(Object actionKey) Here: true if a String key starts with #COLUMN_CONTROL_MARKER.protected voidPopulates the popup from scratch.voidSets the grouper to use for grouping the additional actions.voidsetAdditionalActionsVisible(boolean additionalActionsVisible) Sets the additonalActionsVisible property.voidToggles the popup component's visibility.protected voidUpdates the action properties provided by the LAF.protected voidUpdates this button's properties provided by the LAF.protected voidupdateFromColumnModelChange(TableColumnModel oldModel) Adjusts internal state after table's column model property has changed.protected voidSynchs this button's enabled with table's enabled.voidupdateUI()Methods inherited from class javax.swing.JButton
getAccessibleContext, getUIClassID, isDefaultButton, isDefaultCapable, paramString, removeNotify, setDefaultCapableMethods inherited from class javax.swing.AbstractButton
actionPropertyChanged, addActionListener, addChangeListener, addImpl, addItemListener, checkHorizontalKey, checkVerticalKey, configurePropertiesFromAction, createActionListener, createActionPropertyChangeListener, createChangeListener, createItemListener, doClick, doClick, fireActionPerformed, fireItemStateChanged, fireStateChanged, getAction, getActionCommand, getActionListeners, getChangeListeners, getDisabledIcon, getDisabledSelectedIcon, getDisplayedMnemonicIndex, getHideActionText, getHorizontalAlignment, getHorizontalTextPosition, getIcon, getIconTextGap, getItemListeners, getLabel, getMargin, getMnemonic, getModel, getMultiClickThreshhold, getPressedIcon, getRolloverIcon, getRolloverSelectedIcon, getSelectedIcon, getSelectedObjects, getText, getUI, getVerticalAlignment, getVerticalTextPosition, imageUpdate, init, isBorderPainted, isContentAreaFilled, isFocusPainted, isRolloverEnabled, isSelected, paintBorder, removeActionListener, removeChangeListener, removeItemListener, setAction, setActionCommand, setBorderPainted, setContentAreaFilled, setDisabledIcon, setDisabledSelectedIcon, setDisplayedMnemonicIndex, setEnabled, setFocusPainted, setHideActionText, setHorizontalAlignment, setHorizontalTextPosition, setIcon, setIconTextGap, setLabel, setLayout, setMargin, setMnemonic, setMnemonic, setModel, setMultiClickThreshhold, setPressedIcon, setRolloverEnabled, setRolloverIcon, setRolloverSelectedIcon, setSelected, setSelectedIcon, setText, setUI, setVerticalAlignment, setVerticalTextPositionMethods 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, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, 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, addPropertyChangeListener, addPropertyChangeListener, 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, 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, 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
-
Field Details
-
COLUMN_CONTROL_MARKER
Marker to auto-recognize actions which should be added to the popup.- See Also:
-
COLUMN_CONTROL_BUTTON_ICON_KEY
the key for looking up the control's icon in the UIManager. Typically, it's LAF dependent.- See Also:
-
COLUMN_CONTROL_BUTTON_MARGIN_KEY
the key for looking up the control's margin in the UIManager. Typically, it's LAF dependent.- See Also:
-
popup
exposed for testing.
-
-
Constructor Details
-
ColumnControlButton
Creates a column control button for the table. Uses the default icon as provided by the addon.- Parameters:
table- theJXTablecontrolled by this component
-
ColumnControlButton
Creates a column control button for the table. The button uses the given icon and has no text.- Parameters:
table- theJXTablecontrolled by this componenticon- theIconto show
-
-
Method Details
-
updateUI
public void updateUI() -
updateButtonUI
protected void updateButtonUI()Updates this button's properties provided by the LAF. Here: overwrites the action's small_icon with the icon from the ui if the current icon is null or a UIResource. -
updateActionUI
protected void updateActionUI()Updates the action properties provided by the LAF. Here: overwrites the action's small_icon with the icon from the ui if the current icon is null or a UIResource. -
togglePopup
public void togglePopup()Toggles the popup component's visibility. This method is called by this control's default action.Here: delegates to getControlPopup().
-
getAdditionalActionsVisible
public boolean getAdditionalActionsVisible()Returns the actionsVisible property which controls whether or not additional table Actions should be included into the popup.- Returns:
- a boolean indicating whether or not additional table Actions are visible
-
setAdditionalActionsVisible
public void setAdditionalActionsVisible(boolean additionalActionsVisible) Sets the additonalActionsVisible property. It controls whether or not additional table actions should be included into the popup.The default value is
true.- Parameters:
additionalActionsVisible- the additionalActionsVisible to set
-
setActionGrouper
Sets the grouper to use for grouping the additional actions. Maybe null to have no additional grouping. Has no effect if the ColumnControlPopup doesn't implement Groupable. The default ColumnControlPopup supports Groupable, but is instantiated without a Grouper.- Parameters:
grouper- ActionGrouper
-
applyComponentOrientation
- Overrides:
applyComponentOrientationin classContainer
-
getColumnControlPopup
Returns to popup component for user interaction. Lazily creates the component if necessary.- Returns:
- the ColumnControlPopup for showing the items, guaranteed
to be not
null. - See Also:
-
createColumnControlPopup
Factory method to return aColumnControlPopup. Subclasses can override to hook custom implementations.- Returns:
- the
ColumnControlPopupused.
-
updateFromColumnModelChange
Adjusts internal state after table's column model property has changed. Handles cleanup of listeners to the old/new columnModel (Note, that it listens to the column model only if it can control column visibility). Updates content of popup.- Parameters:
oldModel- the oldTableColumnModelwe had been listening to.
-
updateFromTableEnabledChanged
protected void updateFromTableEnabledChanged()Synchs this button's enabled with table's enabled. -
canControl
protected boolean canControl()Method to check if we can control column visibility POST: if true we can be sure to have an extended TableColumnModel- Returns:
- boolean to indicate if controlling the visibility state is possible.
-
populatePopup
protected void populatePopup()Populates the popup from scratch. If applicable, creates and adds column visibility actions. Always adds additional actions. -
clearAll
protected void clearAll()removes all components from the popup, making sure to release all columnVisibility actions. -
clearColumnVisibilityActions
protected void clearColumnVisibilityActions()Releases actions and clears list of actions. -
addVisibilityActionItems
protected void addVisibilityActionItems()Adds visibility actions into the popup view. Here: delegates the list of actions to the DefaultColumnControlPopup.PRE: columnVisibilityActions populated before calling this.
-
addAdditionalActionItems
protected void addAdditionalActionItems()Adds additional actions to the popup, if additionalActionsVisible is true, does nothing otherwise.Here: delegates the list of actions as returned by #getAdditionalActions() to the DefaultColumnControlPopup. Does nothing if #getColumnActions() is empty.
-
createVisibilityActions
protected void createVisibilityActions()Creates and adds a ColumnVisiblityAction for every column that should be togglable via the column control.Here: all table columns contained in the
TableColumnModel- visible and invisible columns - tocreateColumnVisibilityActionand adds all notnullreturn values.PRE: canControl()
-
createColumnVisibilityAction
protected ColumnControlButton.ColumnVisibilityAction createColumnVisibilityAction(TableColumn column) Creates and returns aColumnVisibilityActionfor the givenTableColumn. The return value might be null, f.i. if the column should not be allowed to be toggled.- Parameters:
column- theTableColumnto use for the action- Returns:
- a ColumnVisibilityAction to use for the given column,
may be
null.
-
getColumnVisibilityActions
Lazyly creates and returns the List of visibility actions.- Returns:
- the list of visibility actions, guaranteed to be != null.
-
getAdditionalActions
creates and returns a list of additional Actions to add to the popup. Here: the actions are looked up in the table's actionMap according to the keys as returned from #getColumnControlActionKeys();- Returns:
- a list containing all additional actions to include into the popup.
-
getColumnControlActionKeys
Looks up and returns action keys to access actions in the table's actionMap which should be included into the popup. Here: all keys with isColumnControlActionKey(key). The list is sorted by those keys.- Returns:
- the action keys of table's actionMap entries whose action should be included into the popup.
-
isColumnControlActionKey
Here: true if a String key starts with #COLUMN_CONTROL_MARKER.- Parameters:
actionKey- a key in the table's actionMap.- Returns:
- a boolean to indicate whether the given actionKey maps to an action which should be included into the popup.
-
getTablePropertyChangeListener
Returns the listener to table's property changes. The listener is lazily created if necessary.- Returns:
- the
PropertyChangeListenerfor use with the table, guaranteed to be notnull.
-
createTablePropertyChangeListener
Creates the listener to table's property changes. Subclasses are free to roll their own.Implementation note: this listener reacts to table's
enabledandcolumnModelproperties and calls the respectiveupdateFromXXmethodes.- Returns:
- the
PropertyChangeListenerfor use with the table.
-
getColumnModelListener
Returns the listener to table's column model. The listener is lazily created if necessary.- Returns:
- the
TableColumnModelListenerfor use with the table's column model, guaranteed to be notnull.
-
createColumnModelListener
Creates the listener to columnModel. Subclasses are free to roll their own.Implementation note: this listener reacts to "real" columnRemoved/-Added by populating the popups content from scratch.
- Returns:
- the
TableColumnModelListenerfor use with the table's columnModel.
-