Class ColumnControlButton

  • All Implemented Interfaces:
    java.awt.image.ImageObserver, java.awt.ItemSelectable, java.awt.MenuContainer, java.io.Serializable, javax.accessibility.Accessible, javax.swing.SwingConstants

    public class ColumnControlButton
    extends javax.swing.JButton
    A component to allow interactive customization of 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
    See Also:
    TableColumnExt, TableColumnModelExt, JXTable.setColumnControl(javax.swing.JComponent), Serialized Form
    • Nested Class Summary

      Nested Classes 
      Modifier and Type Class 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.
      • Nested classes/interfaces inherited from class javax.swing.JButton

        javax.swing.JButton.AccessibleJButton
      • Nested classes/interfaces inherited from class javax.swing.AbstractButton

        javax.swing.AbstractButton.AccessibleAbstractButton, javax.swing.AbstractButton.ButtonChangeListener
      • Nested classes/interfaces inherited from class javax.swing.JComponent

        javax.swing.JComponent.AccessibleJComponent
      • Nested classes/interfaces inherited from class java.awt.Container

        java.awt.Container.AccessibleAWTContainer
      • Nested classes/interfaces inherited from class java.awt.Component

        java.awt.Component.AccessibleAWTComponent, java.awt.Component.BaselineResizeBehavior, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
    • Field Summary

      Fields 
      Modifier and Type Field Description
      private boolean additionalActionsVisible  
      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.
      (package private) javax.swing.event.TableColumnModelListener columnModelListener
      Listener for table's columnModel.
      private java.util.List<ColumnControlButton.ColumnVisibilityAction> columnVisibilityActions
      the list of actions for column menuitems.
      protected ColumnControlPopup popup
      exposed for testing.
      private JXTable table
      The table which is controlled by this.
      private java.beans.PropertyChangeListener tablePropertyChangeListener
      Listener for table property changes.
      • 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
    • Method Summary

      All Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      protected void addAdditionalActionItems()
      Adds additional actions to the popup, if additionalActionsVisible is true, does nothing otherwise.
      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.
      private javax.swing.Action createControlAction​(javax.swing.Icon icon)
      Creates and returns the default action for this button.
      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.
      boolean getAdditionalActionsVisible()
      Returns the actionsVisible property which controls whether or not additional table Actions should be included into 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.
      private void init()
      Initialize the column control button's gui
      private void installTable​(JXTable table)  
      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 setActionGrouper​(ColumnControlPopup.ActionGrouper grouper)
      Sets the grouper to use for grouping the additional actions.
      void setAdditionalActionsVisible​(boolean additionalActionsVisible)
      Sets the additonalActionsVisible property.
      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()  
      • 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
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • COLUMN_CONTROL_MARKER

        public static final java.lang.String COLUMN_CONTROL_MARKER
        Marker to auto-recognize actions which should be added to the popup.
        See Also:
        Constant Field Values
      • COLUMN_CONTROL_BUTTON_ICON_KEY

        public static final java.lang.String COLUMN_CONTROL_BUTTON_ICON_KEY
        the key for looking up the control's icon in the UIManager. Typically, it's LAF dependent.
        See Also:
        Constant Field Values
      • COLUMN_CONTROL_BUTTON_MARGIN_KEY

        public static final java.lang.String COLUMN_CONTROL_BUTTON_MARGIN_KEY
        the key for looking up the control's margin in the UIManager. Typically, it's LAF dependent.
        See Also:
        Constant Field Values
      • table

        private JXTable table
        The table which is controlled by this.
      • tablePropertyChangeListener

        private java.beans.PropertyChangeListener tablePropertyChangeListener
        Listener for table property changes.
      • columnModelListener

        javax.swing.event.TableColumnModelListener columnModelListener
        Listener for table's columnModel.
      • additionalActionsVisible

        private boolean additionalActionsVisible
    • Constructor Detail

      • ColumnControlButton

        public ColumnControlButton​(JXTable table)
        Creates a column control button for the table. Uses the default icon as provided by the addon.
        Parameters:
        table - the JXTable controlled by this component
      • ColumnControlButton

        public ColumnControlButton​(JXTable table,
                                   javax.swing.Icon icon)
        Creates a column control button for the table. The button uses the given icon and has no text.
        Parameters:
        table - the JXTable controlled by this component
        icon - the Icon to show
    • Method Detail

      • updateUI

        public void updateUI()
        Overrides:
        updateUI in class javax.swing.JButton
      • 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

        public void setActionGrouper​(ColumnControlPopup.ActionGrouper grouper)
        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 -
      • applyComponentOrientation

        public void applyComponentOrientation​(java.awt.ComponentOrientation o)
        Overrides:
        applyComponentOrientation in class java.awt.Container
      • getColumnControlPopup

        protected 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 ColumnControlPopup createColumnControlPopup()
        Factory method to return a ColumnControlPopup. Subclasses can override to hook custom implementations.
        Returns:
        the ColumnControlPopup used.
      • updateFromColumnModelChange

        protected void updateFromColumnModelChange​(javax.swing.table.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 old TableColumnModel we 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 - to createColumnVisibilityAction and adds all not null return values.

        PRE: canControl()

        See Also:
        createColumnVisibilityAction(javax.swing.table.TableColumn)
      • createColumnVisibilityAction

        protected ColumnControlButton.ColumnVisibilityAction createColumnVisibilityAction​(javax.swing.table.TableColumn column)
        Creates and returns a ColumnVisibilityAction for the given TableColumn. The return value might be null, f.i. if the column should not be allowed to be toggled.
        Parameters:
        column - the TableColumn to use for the action
        Returns:
        a ColumnVisibilityAction to use for the given column, may be null.
      • getColumnVisibilityActions

        protected java.util.List<ColumnControlButton.ColumnVisibilityAction> getColumnVisibilityActions()
        Lazyly creates and returns the List of visibility actions.
        Returns:
        the list of visibility actions, guaranteed to be != null.
      • getAdditionalActions

        protected java.util.List<javax.swing.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 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. 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​(java.lang.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.
      • installTable

        private void installTable​(JXTable table)
      • init

        private void init()
        Initialize the column control button's gui
      • createControlAction

        private javax.swing.Action createControlAction​(javax.swing.Icon icon)
        Creates and returns the default action for this button.
        Parameters:
        icon -
        icon - the Icon to use in the action.
        Returns:
        the default action.
      • getTablePropertyChangeListener

        protected java.beans.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 not null.
      • createTablePropertyChangeListener

        protected java.beans.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 and columnModel properties and calls the respective updateFromXX methodes.

        Returns:
        the PropertyChangeListener for use with the table.
      • getColumnModelListener

        protected javax.swing.event.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 not null.
      • createColumnModelListener

        protected javax.swing.event.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.