public class ColumnControlButton
extends javax.swing.JButton
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 all action's state in synch with Table-/Column state.
The visible behaviour of the popup is delegated to a
ColumnControlPopup
.
Modifier and Type | Class and Description |
---|---|
class |
ColumnControlButton.ColumnVisibilityAction
A specialized
Action which takes care of keeping in synch with
TableColumn state. |
class |
ColumnControlButton.DefaultColumnControlPopup
A default implementation of ColumnControlPopup.
|
javax.swing.JButton.AccessibleJButton
javax.swing.AbstractButton.AccessibleAbstractButton, javax.swing.AbstractButton.ButtonChangeListener
javax.swing.JComponent.AccessibleJComponent
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
COLUMN_CONTROL_BUTTON_ICON_KEY
the key for looking up the control's icon in the UIManager.
|
static java.lang.String |
COLUMN_CONTROL_BUTTON_MARGIN_KEY
the key for looking up the control's margin in the UIManager.
|
static java.lang.String |
COLUMN_CONTROL_MARKER
Marker to auto-recognize actions which should be added to the popup.
|
protected ColumnControlPopup |
popup
exposed for testing.
|
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_PROPERTY
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
Constructor and Description |
---|
ColumnControlButton(JXTable table)
Creates a column control button for the table.
|
ColumnControlButton(JXTable table,
javax.swing.Icon icon)
Creates a column control button for the table.
|
Modifier and Type | Method and Description |
---|---|
protected void |
addAdditionalActionItems()
Adds additional actions to the popup.
|
protected void |
addVisibilityActionItems()
Adds visibility actions into the popup view.
|
void |
applyComponentOrientation(java.awt.ComponentOrientation o) |
protected boolean |
canControl()
Method to check if we can control column visibility POST: if true we can
be sure to have an extended TableColumnModel
|
protected void |
clearAll()
removes all components from the popup, making sure to release all
columnVisibility actions.
|
protected void |
clearColumnVisibilityActions()
Releases actions and clears list of actions.
|
protected ColumnControlPopup |
createColumnControlPopup()
Factory method to return a
ColumnControlPopup . |
protected javax.swing.event.TableColumnModelListener |
createColumnModelListener()
Creates the listener to columnModel.
|
protected ColumnControlButton.ColumnVisibilityAction |
createColumnVisibilityAction(javax.swing.table.TableColumn column)
Creates and returns a
ColumnVisibilityAction for the given
TableColumn . |
protected java.beans.PropertyChangeListener |
createTablePropertyChangeListener()
Creates the listener to table's property changes.
|
protected void |
createVisibilityActions()
Creates and adds a ColumnVisiblityAction for every column that should be
togglable via the column control.
|
protected java.util.List<javax.swing.Action> |
getAdditionalActions()
creates and returns a list of additional Actions to add to the popup.
|
protected java.util.List |
getColumnControlActionKeys()
Looks up and returns action keys to access actions in the
table's actionMap which should be included into the popup.
|
protected ColumnControlPopup |
getColumnControlPopup()
Returns to popup component for user interaction.
|
protected javax.swing.event.TableColumnModelListener |
getColumnModelListener()
Returns the listener to table's column model.
|
protected java.util.List<ColumnControlButton.ColumnVisibilityAction> |
getColumnVisibilityActions()
Lazyly creates and returns the List of visibility actions.
|
protected java.beans.PropertyChangeListener |
getTablePropertyChangeListener()
Returns the listener to table's property changes.
|
protected boolean |
isColumnControlActionKey(java.lang.Object actionKey)
Here: true if a String key starts with #COLUMN_CONTROL_MARKER.
|
protected void |
populatePopup()
Populates the popup from scratch.
|
void |
togglePopup()
Toggles the popup component's visibility.
|
protected void |
updateActionUI()
Updates the action properties provided by the LAF.
|
protected void |
updateButtonUI()
Updates this button's properties provided by the LAF.
|
protected void |
updateFromColumnModelChange(javax.swing.table.TableColumnModel oldModel)
Adjusts internal state after table's column model property has changed.
|
protected void |
updateFromTableEnabledChanged()
Synchs this button's enabled with table's enabled.
|
void |
updateUI() |
getAccessibleContext, getUIClassID, isDefaultButton, isDefaultCapable, paramString, removeNotify, setDefaultCapable
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, setVerticalTextPosition
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, update
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, validateTree
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, 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, transferFocusBackward, transferFocusUpCycle
public static final java.lang.String COLUMN_CONTROL_MARKER
public static final java.lang.String COLUMN_CONTROL_BUTTON_ICON_KEY
public static final java.lang.String COLUMN_CONTROL_BUTTON_MARGIN_KEY
protected ColumnControlPopup popup
public ColumnControlButton(JXTable table)
table
- the JXTable
controlled by this componentpublic ColumnControlButton(JXTable table, javax.swing.Icon icon)
table
- the JXTable
controlled by this componenticon
- the Icon
to showpublic void updateUI()
updateUI
in class javax.swing.JButton
protected void updateButtonUI()
protected void updateActionUI()
public void togglePopup()
Here: delegates to getControlPopup().
public void applyComponentOrientation(java.awt.ComponentOrientation o)
applyComponentOrientation
in class java.awt.Container
protected ColumnControlPopup getColumnControlPopup()
null
.createColumnControlPopup()
protected ColumnControlPopup createColumnControlPopup()
ColumnControlPopup
.
Subclasses can override to hook custom implementations.ColumnControlPopup
used.protected void updateFromColumnModelChange(javax.swing.table.TableColumnModel oldModel)
oldModel
- the old TableColumnModel
we had been listening to.protected void updateFromTableEnabledChanged()
protected boolean canControl()
protected void populatePopup()
protected void clearAll()
protected void clearColumnVisibilityActions()
protected void addVisibilityActionItems()
PRE: columnVisibilityActions populated before calling this.
protected void addAdditionalActionItems()
protected void createVisibilityActions()
Here: all table columns contained in the TableColumnModel
-
visible and invisible columns - to createColumnVisibilityAction
and
adds all not null
return values.
PRE: canControl()
protected ColumnControlButton.ColumnVisibilityAction createColumnVisibilityAction(javax.swing.table.TableColumn column)
ColumnVisibilityAction
for the given
TableColumn
. The return value might be null, f.i. if the
column should not be allowed to be toggled.column
- the TableColumn
to use for the actionnull
.protected java.util.List<ColumnControlButton.ColumnVisibilityAction> getColumnVisibilityActions()
protected java.util.List<javax.swing.Action> getAdditionalActions()
protected java.util.List getColumnControlActionKeys()
protected boolean isColumnControlActionKey(java.lang.Object actionKey)
actionKey
- a key in the table's actionMap.protected java.beans.PropertyChangeListener getTablePropertyChangeListener()
PropertyChangeListener
for use with the
table, guaranteed to be not null
.protected java.beans.PropertyChangeListener createTablePropertyChangeListener()
Implementation note: this listener reacts to table's enabled
and
columnModel
properties and calls the respective
updateFromXX
methodes.
PropertyChangeListener
for use with the table.protected javax.swing.event.TableColumnModelListener getColumnModelListener()
TableColumnModelListener
for use with the
table's column model, guaranteed to be not null
.protected javax.swing.event.TableColumnModelListener createColumnModelListener()
Implementation note: this listener reacts to "real" columnRemoved/-Added by populating the popups content from scratch.
TableColumnModelListener
for use with the
table's columnModel.