Class CColumnControlButton
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- javax.swing.AbstractButton
-
- javax.swing.JButton
-
- org.compiere.swing.CColumnControlButton
-
- All Implemented Interfaces:
ImageObserver
,ItemSelectable
,MenuContainer
,Serializable
,Accessible
,SwingConstants
public class CColumnControlButton extends JButton
Code and description adapted from SwingX ColumnControlButton class. A component to allow interactive customization ofCTable
'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
CTable
's trailing corner, if enabled:
From the perspective of atable.setColumnControlVisible(true);
CTable
, 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
.- See Also:
CTable#setColumnControl
, Serialized Form
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
CColumnControlButton.ColumnVisibilityAction
A specializedAction
which takes care of keeping in synch with TableColumn state.class
CColumnControlButton.DefaultColumnControlPopup
A default implementation of ColumnControlPopup.-
Nested classes/interfaces inherited from class javax.swing.JButton
JButton.AccessibleJButton
-
Nested classes/interfaces inherited from class javax.swing.AbstractButton
AbstractButton.AccessibleAbstractButton, AbstractButton.ButtonChangeListener
-
Nested classes/interfaces inherited from class javax.swing.JComponent
JComponent.AccessibleJComponent
-
Nested classes/interfaces inherited from class java.awt.Container
Container.AccessibleAWTContainer
-
Nested classes/interfaces inherited from class java.awt.Component
Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy
-
-
Field Summary
Fields Modifier and Type Field Description static String
COLUMN_CONTROL_MARKER
Marker to auto-recognize actions which should be added to the popup.protected org.jdesktop.swingx.table.ColumnControlPopup
popup
exposed 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_PROPERTY
-
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
-
Fields inherited from class java.awt.Component
accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
-
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
-
Fields 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
Constructors Constructor Description CColumnControlButton(CTable table, Icon icon)
Creates a column control button for the table.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected void
addAdditionalActionItems()
Adds additional actions to the popup.protected void
addVisibilityActionItems()
Adds visibility actions into the popup view.void
applyComponentOrientation(ComponentOrientation o)
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 org.jdesktop.swingx.table.ColumnControlPopup
createColumnControlPopup()
Factory method to return aColumnControlPopup
.protected TableColumnModelListener
createColumnModelListener()
Creates the listener to columnModel.protected CColumnControlButton.ColumnVisibilityAction
createColumnVisibilityAction(TableColumn column)
Creates and returns aColumnVisibilityAction
for the givenTableColumn
.protected 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 List<Action>
getAdditionalActions()
creates and returns a list of additional Actions to add to the popup.protected List<String>
getColumnControlActionKeys()
Looks up and returns action keys to access actions in the table's actionMap which should be included into the popup.protected org.jdesktop.swingx.table.ColumnControlPopup
getColumnControlPopup()
Returns to popup component for user interaction.protected TableColumnModelListener
getColumnModelListener()
Returns the listener to table's column model.protected List<CColumnControlButton.ColumnVisibilityAction>
getColumnVisibilityActions()
Lazyly creates and returns the List of visibility actions.protected PropertyChangeListener
getTablePropertyChangeListener()
Returns the listener to table's property changes.protected boolean
isColumnControlActionKey(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
updateFromColumnModelChange(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()
-
Methods inherited from class javax.swing.JButton
getAccessibleContext, getUIClassID, isDefaultButton, isDefaultCapable, paramString, removeNotify, setDefaultCapable
-
Methods 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, setVerticalTextPosition
-
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, 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
-
Methods 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, 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, 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 Detail
-
COLUMN_CONTROL_MARKER
public static final String COLUMN_CONTROL_MARKER
Marker to auto-recognize actions which should be added to the popup.- See Also:
- Constant Field Values
-
popup
protected org.jdesktop.swingx.table.ColumnControlPopup popup
exposed for testing.
-
-
Method Detail
-
togglePopup
public void togglePopup()
Toggles the popup component's visibility. This method is called by this control's default action.Here: delegates to getControlPopup().
-
applyComponentOrientation
public void applyComponentOrientation(ComponentOrientation o)
- Overrides:
applyComponentOrientation
in classContainer
-
getColumnControlPopup
protected org.jdesktop.swingx.table.ColumnControlPopup 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()
-
createColumnControlPopup
protected org.jdesktop.swingx.table.ColumnControlPopup createColumnControlPopup()
Factory method to return aColumnControlPopup
. Subclasses can override to hook custom implementations.- Returns:
- the
ColumnControlPopup
used.
-
updateFromColumnModelChange
protected void updateFromColumnModelChange(TableColumnModel oldModel)
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 oldTableColumnModel
we had been listening to.
-
updateFromTableEnabledChanged
protected void updateFromTableEnabledChanged()
Synchs this button's enabled with table's enabled.
-
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. 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 - tocreateColumnVisibilityAction
and adds all notnull
return values.PRE: canControl()
-
createColumnVisibilityAction
protected CColumnControlButton.ColumnVisibilityAction createColumnVisibilityAction(TableColumn column)
Creates and returns aColumnVisibilityAction
for the givenTableColumn
. The return value might be null, f.i. if the column should not be allowed to be toggled.- Parameters:
column
- theTableColumn
to use for the action- Returns:
- a ColumnVisibilityAction to use for the given column,
may be
null
.
-
getColumnVisibilityActions
protected List<CColumnControlButton.ColumnVisibilityAction> getColumnVisibilityActions()
Lazyly creates and returns the List of visibility actions.- Returns:
- the list of visibility actions, guaranteed to be != null.
-
getAdditionalActions
protected List<Action> 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
protected List<String> 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
protected boolean isColumnControlActionKey(Object actionKey)
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
protected PropertyChangeListener getTablePropertyChangeListener()
Returns the listener to table's property changes. The listener is lazily created if necessary.- Returns:
- the
PropertyChangeListener
for use with the table, guaranteed to be notnull
.
-
createTablePropertyChangeListener
protected PropertyChangeListener createTablePropertyChangeListener()
Creates the listener to table's property changes. Subclasses are free to roll their own.Implementation note: this listener reacts to table's
enabled
andcolumnModel
properties and calls the respectiveupdateFromXX
methodes.- Returns:
- the
PropertyChangeListener
for use with the table.
-
getColumnModelListener
protected TableColumnModelListener getColumnModelListener()
Returns the listener to table's column model. The listener is lazily created if necessary.- Returns:
- the
TableColumnModelListener
for use with the table's column model, guaranteed to be notnull
.
-
createColumnModelListener
protected TableColumnModelListener 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
TableColumnModelListener
for use with the table's columnModel.
-
-