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

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