Module java.desktop
Package javax.swing

## Interface MenuElement

- All Known Implementing Classes:
    `BasicComboPopup`, `BasicInternalFrameTitlePane.SystemMenuBar`, `JCheckBoxMenuItem`, `JMenu`, `JMenuBar`, `JMenuItem`, `JPopupMenu`, `JRadioButtonMenuItem`, `MetalComboBoxUI.MetalComboPopup`

      public interface MenuElement

  Any component that can be placed into a menu should implement this interface. This interface is used by `MenuSelectionManager` to handle selection and navigation in menu hierarchies.
  Since:
    1.2

- - ### Method Summary

    Modifier and Type | Method | Description
    --- | --- | ---
    `Component` | `getComponent()` | This method should return the `java.awt.Component` used to paint the receiving element.
    `MenuElement[]` | `getSubElements()` | This method should return an array containing the sub-elements for the receiving menu element.
    `void` | `menuSelectionChanged​(boolean isIncluded)` | Call by the `MenuSelectionManager` when the `MenuElement` is added or removed from the menu selection.
    `void` | `processKeyEvent​(KeyEvent event, MenuElement[] path, MenuSelectionManager manager)` | Process a key event.
    `void` | `processMouseEvent​(MouseEvent event, MenuElement[] path, MenuSelectionManager manager)` | Processes a mouse event.

- - ### Method Detail

    - #### processMouseEvent

          void processMouseEvent​(MouseEvent event,
                                 MenuElement[] path,
                                 MenuSelectionManager manager)

      Processes a mouse event. `event` is a `MouseEvent` with source being the receiving element's component. `path` is the path of the receiving element in the menu hierarchy including the receiving element itself. `manager` is the `MenuSelectionManager`for the menu hierarchy. This method should process the `MouseEvent` and change the menu selection if necessary by using `MenuSelectionManager`'s API Note: you do not have to forward the event to sub-components. This is done automatically by the `MenuSelectionManager`.
      Parameters:
        `event` - a `MouseEvent` to be processed
        `path` - the path of the receiving element in the menu hierarchy
        `manager` - the `MenuSelectionManager` for the menu hierarchy

    - #### processKeyEvent

          void processKeyEvent​(KeyEvent event,
                               MenuElement[] path,
                               MenuSelectionManager manager)

      Process a key event.
      Parameters:
        `event` - a `KeyEvent` to be processed
        `path` - the path of the receiving element in the menu hierarchy
        `manager` - the `MenuSelectionManager` for the menu hierarchy

    - #### menuSelectionChanged

          void menuSelectionChanged​(boolean isIncluded)

      Call by the `MenuSelectionManager` when the `MenuElement` is added or removed from the menu selection.
      Parameters:
        `isIncluded` - can be used to indicate if this `MenuElement` is active (if it is a menu) or is on the part of the menu path that changed (if it is a menu item).

    - #### getSubElements

          MenuElement[] getSubElements()

      This method should return an array containing the sub-elements for the receiving menu element.
      Returns:
        an array of `MenuElement`s

    - #### getComponent

          Component getComponent()

      This method should return the `java.awt.Component` used to paint the receiving element. The returned component will be used to convert events and detect if an event is inside a `MenuElement`'s component.
      Returns:
        the `Component` value