Package org.pushingpixels.flamingo.api.common.popup

# Class JCommandPopupMenu

java.lang.Object
java.awt.Component
java.awt.Container
javax.swing.JComponent
javax.swing.JPanel
org.pushingpixels.flamingo.api.common.popup.JPopupPanel
org.pushingpixels.flamingo.api.common.popup.JCommandPopupMenu

All Implemented Interfaces:
  `ImageObserver`, `MenuContainer`, `Serializable`, `Accessible`

Direct Known Subclasses:
  `JColorSelectorPopupMenu`

public class JCommandPopupMenu extends JPopupPanel
Popup menu. Can host any number of command menu buttons added with `addMenuButton(JCommandMenuButton)` separated with optional `addMenuSeparator()`. The `JCommandPopupMenu(JCommandButtonPanel, int, int)` constructor allows placing a scrollable command button panel in the top part of the popup menu.

See Also:
  - Serialized Form

## Nested Class Summary

## Nested classes/interfaces inherited from class org.pushingpixels.flamingo.api.common.popup.JPopupPanel

`JPopupPanel.PopupPanelCustomizer`

## Nested classes/interfaces inherited from class javax.swing.JPanel

`JPanel.AccessibleJPanel`

## 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
`protected JCommandButtonPanel`
`mainButtonPanel`
The main button panel.
`protected int`
`maxButtonColumns`
Maximum number of button columns visible in the `mainButtonPanel`.
`protected int`
`maxVisibleButtonRows`
Maximum number of button rows visible in the `mainButtonPanel`.
`protected int`
`maxVisibleMenuButtons`
Maximum number of menu items visible in this menu.
`protected List<Component>`
`menuComponents`
Menu components.
`static final String`
`uiClassID`

### Fields inherited from class org.pushingpixels.flamingo.api.common.popup.JPopupPanel

`customizer`

### 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`

## Constructor Summary

Constructors
Constructor
Description
`JCommandPopupMenu()`
Creates an empty popup menu with no button panel.
`JCommandPopupMenu(JCommandButtonPanel buttonPanel, int maxButtonColumns, int maxVisibleButtonRows)`
Creates a popup menu hosting the specified button panel.

## Method Summary

Modifier and Type
Method
Description
`void`
`addChangeListener(ChangeListener l)`
Adds the specified change listener to track changes to this popup menu.
`void`
`addMenuButton(JCommandMenuButton menuButton)`
Adds the specified menu button to this menu.
`void`
`addMenuButton(JCommandToggleMenuButton menuButton)`
Adds the specified toggle menu button to this menu.
`protected void`
`addMenuPanel(JPanel menuPanel)`
Adds a menu panel to this menu.
`void`
`addMenuSeparator()`
Adds a menu separator to this menu.
`protected void`
`fireStateChanged()`
Notifies all registered listener that the state of this popup menu has changed.
`JCommandButtonPanel`
`getMainButtonPanel()`
Returns the command button panel of this menu.
`int`
`getMaxButtonColumns()`
Returns the maximum number of button columns visible in the command button panel of this menu.
`int`
`getMaxVisibleButtonRows()`
Returns the maximum number of button rows visible in the command button panel of this menu.
`int`
`getMaxVisibleMenuButtons()`
Returns the maximum number of menu items visible in this menu.
`List<Component>`
`getMenuComponents()`
Returns an unmodifiable list of all the menu components.
`String`
`getUIClassID()`
`boolean`
`hasCommandButtonPanel()`
Returns indication whether this menu has a command button panel.
`boolean`
`isToDismissOnChildClick()`
`void`
`removeChangeListener(ChangeListener l)`
Removes the specified change listener from tracking changes to this popup menu.
`void`
`setMaxVisibleMenuButtons(int maxVisibleMenuButtons)`
Sets the maximum number of menu items visible in this menu.
`void`
`setToDismissOnChildClick(boolean toDismissOnChildClick)`
`void`
`updateUI()`

### Methods inherited from class org.pushingpixels.flamingo.api.common.popup.JPopupPanel

`getCustomizer, getUI, setCustomizer, setUI`

### Methods inherited from class javax.swing.JPanel

`getAccessibleContext, paramString, setUI`

### 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, 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, update`

### Methods 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, 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, 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, transferFocusUpCycle`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

## Field Details

### uiClassID

public static final String uiClassID

See Also:
  - `getUIClassID()`
  - Constant Field Values

### mainButtonPanel

protected JCommandButtonPanel mainButtonPanel
The main button panel. Can be `null` if this command popup menu was created with the `JCommandPopupMenu()` constructor.

See Also:
  - `JCommandPopupMenu(JCommandButtonPanel, int, int)`
  - `hasCommandButtonPanel()`
  - `getMainButtonPanel()`

### menuComponents

protected List<Component> menuComponents
Menu components. This list holds:

- `JCommandMenuButton`s added with `addMenuButton(JCommandMenuButton)`
- `JCommandToggleMenuButton`s added with `addMenuButton(JCommandToggleMenuButton)`
- `JPopupMenu.Separator`s added with `addMenuSeparator()`
- `JPanel`s added by the subclasses with `addMenuPanel(JPanel)`

See Also:
  - `addMenuButton(JCommandMenuButton)`
  - `addMenuButton(JCommandToggleMenuButton)`
  - `addMenuSeparator()`
  - `addMenuPanel(JPanel)`
  - `getMenuComponents()`

### maxButtonColumns

protected int maxButtonColumns
Maximum number of button columns visible in the `mainButtonPanel`.

See Also:
  - `JCommandPopupMenu(JCommandButtonPanel, int, int)`
  - `getMaxButtonColumns()`

### maxVisibleButtonRows

protected int maxVisibleButtonRows
Maximum number of button rows visible in the `mainButtonPanel`.

See Also:
  - `JCommandPopupMenu(JCommandButtonPanel, int, int)`
  - `getMaxVisibleButtonRows()`

### maxVisibleMenuButtons

protected int maxVisibleMenuButtons
Maximum number of menu items visible in this menu. If more buttons are added with the `addMenuButton(JCommandMenuButton)` and `addMenuButton(JCommandToggleMenuButton)` APIs, the menu part will show scroller buttons above the first and below the last menu button. If the value is negative, there is no limitation on how many menu buttons are shown, and the entire popup menu can overflow the monitor edges.

## Constructor Details

### JCommandPopupMenu

public JCommandPopupMenu()
Creates an empty popup menu with no button panel.

### JCommandPopupMenu

public JCommandPopupMenu(JCommandButtonPanel buttonPanel, int maxButtonColumns, int maxVisibleButtonRows)
Creates a popup menu hosting the specified button panel.

Parameters:
  `buttonPanel` - Fully constructed button panel.
  `maxButtonColumns` - Maximum number of button columns visible in `buttonPanel`.
  `maxVisibleButtonRows` - Maximum number of button rows visible in `buttonPanel`.

## Method Details

### addMenuButton

public void addMenuButton(JCommandMenuButton menuButton)
Adds the specified menu button to this menu.

Parameters:
  `menuButton` - Menu button to add.

### addMenuButton

public void addMenuButton(JCommandToggleMenuButton menuButton)
Adds the specified toggle menu button to this menu.

Parameters:
  `menuButton` - Menu button to add.

### addMenuSeparator

public void addMenuSeparator()
Adds a menu separator to this menu.

### addMenuPanel

protected void addMenuPanel(JPanel menuPanel)
Adds a menu panel to this menu.

Parameters:
  `menuPanel` - Menu panel to add.

### hasCommandButtonPanel

public boolean hasCommandButtonPanel()
Returns indication whether this menu has a command button panel.

Returns:
  `true` if this menu has a command button panel, `false` otherwise.
See Also:
  - `getMainButtonPanel()`

### getMainButtonPanel

public JCommandButtonPanel getMainButtonPanel()
Returns the command button panel of this menu. Can return `null`.

Returns:
  The command button panel of this menu.
See Also:
  - `hasCommandButtonPanel()`

### getMenuComponents

public List<Component> getMenuComponents()
Returns an unmodifiable list of all the menu components. Can return `null`.

Returns:
  An unmodifiable list of all the menu components

### getMaxButtonColumns

public int getMaxButtonColumns()
Returns the maximum number of button columns visible in the command button panel of this menu. If this menu has been created with the `JCommandPopupMenu()` constructor, zero is returned.

Returns:
  The maximum number of button columns visible in the command button panel of this menu.
See Also:
  - `JCommandPopupMenu(JCommandButtonPanel, int, int)`
  - `getMaxVisibleButtonRows()`

### getMaxVisibleButtonRows

public int getMaxVisibleButtonRows()
Returns the maximum number of button rows visible in the command button panel of this menu. If this menu has been created with the `JCommandPopupMenu()` constructor, zero is returned.

Returns:
  The maximum number of button rows visible in the command button panel of this menu.
See Also:
  - `JCommandPopupMenu(JCommandButtonPanel, int, int)`
  - `getMaxButtonColumns()`

### getMaxVisibleMenuButtons

public int getMaxVisibleMenuButtons()
Returns the maximum number of menu items visible in this menu.

Returns:
  The maximum number of menu items visible in this menu. If the value is negative, there is no limitation on how many menu buttons are shown, and the entire popup menu can overflow the monitor edges.

### setMaxVisibleMenuButtons

public void setMaxVisibleMenuButtons(int maxVisibleMenuButtons)
Sets the maximum number of menu items visible in this menu. If the value is negative, there is no limitation on how many menu buttons are shown, and the entire popup menu can overflow the monitor edges.

Parameters:
  `maxVisibleMenuButtons` - The new value for the maximum number of menu items visible in this menu.

### getUIClassID

public String getUIClassID()

Overrides:
  `getUIClassID` in class `JPopupPanel`

### updateUI

public void updateUI()

Overrides:
  `updateUI` in class `JPopupPanel`

### addChangeListener

public void addChangeListener(ChangeListener l)
Adds the specified change listener to track changes to this popup menu.

Parameters:
  `l` - Change listener to add.
See Also:
  - `removeChangeListener(ChangeListener)`

### removeChangeListener

public void removeChangeListener(ChangeListener l)
Removes the specified change listener from tracking changes to this popup menu.

Parameters:
  `l` - Change listener to remove.
See Also:
  - `addChangeListener(ChangeListener)`

### fireStateChanged

protected void fireStateChanged()
Notifies all registered listener that the state of this popup menu has changed.

### isToDismissOnChildClick

public boolean isToDismissOnChildClick()

### setToDismissOnChildClick

public void setToDismissOnChildClick(boolean toDismissOnChildClick)