# Class MenuItem

java.lang.Object
java.awt.MenuComponent
java.awt.MenuItem

All Implemented Interfaces:
  `Serializable, Accessible`

Direct Known Subclasses:
  `CheckboxMenuItem, Menu`

public class MenuItem extends MenuComponent implements Accessible
All items in a menu must belong to the class `MenuItem`, or one of its subclasses.

The default `MenuItem` object embodies a simple labeled menu item.

This picture of a menu bar shows five menu items:
The first two items are simple menu items, labeled `"Basic"` and `"Simple"`. Following these two items is a separator, which is itself a menu item, created with the label `"-"`. Next is an instance of `CheckboxMenuItem` labeled `"Check"`. The final menu item is a submenu labeled `"More Examples"`, and this submenu is an instance of `Menu`.

When a menu item is selected, AWT sends an action event to the menu item. Since the event is an instance of `ActionEvent`, the `processEvent` method examines the event and passes it along to `processActionEvent`. The latter method redirects the event to any `ActionListener` objects that have registered an interest in action events generated by this menu item.

Note that the subclass `Menu` overrides this behavior and does not send any event to the frame until one of its subitems is selected.

See Also:
  - Serialized Form

- ## Nested Class Summary

  Nested Classes
  Modifier and Type
  Class
  Description
  `protected class`
  `MenuItem.AccessibleAWTMenuItem`
  Inner class of MenuItem used to provide default support for accessibility.

  ### Nested classes/interfaces declared in class MenuComponent

  `MenuComponent.AccessibleAWTMenuComponent`
  Modifier and Type
  Class
  Description
  `protected class`
  `MenuComponent.AccessibleAWTMenuComponent`
  Inner class of `MenuComponent` used to provide default support for accessibility.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `MenuItem()`
  Constructs a new MenuItem with an empty label and no keyboard shortcut.
  `MenuItem(String label)`
  Constructs a new MenuItem with the specified label and no keyboard shortcut.
  `MenuItem(String label, MenuShortcut s)`
  Create a menu item with an associated keyboard shortcut.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `addActionListener(ActionListener l)`
  Adds the specified action listener to receive action events from this menu item.
  `void`
  `addNotify()`
  Creates the menu item's peer.
  `void`
  `deleteShortcut()`
  Delete any `MenuShortcut` object associated with this menu item.
  `void`
  `disable()`
  Deprecated.
  As of JDK version 1.1, replaced by `setEnabled(boolean)`.
  `protected final void`
  `disableEvents(long eventsToDisable)`
  Disables event delivery to this menu item for events defined by the specified event mask parameter.
  `void`
  `enable()`
  Deprecated.
  As of JDK version 1.1, replaced by `setEnabled(boolean)`.
  `void`
  `enable(boolean b)`
  Deprecated.
  As of JDK version 1.1, replaced by `setEnabled(boolean)`.
  `protected final void`
  `enableEvents(long eventsToEnable)`
  Enables event delivery to this menu item for events to be defined by the specified event mask parameter
  `AccessibleContext`
  `getAccessibleContext()`
  Gets the AccessibleContext associated with this MenuItem.
  `String`
  `getActionCommand()`
  Gets the command name of the action event that is fired by this menu item.
  `ActionListener[]`
  `getActionListeners()`
  Returns an array of all the action listeners registered on this menu item.
  `String`
  `getLabel()`
  Gets the label for this menu item.
  `<T extends EventListener>
  T[]`
  `getListeners(Class<T> listenerType)`
  Returns an array of all the objects currently registered as `FooListener`s upon this `MenuItem`.
  `MenuShortcut`
  `getShortcut()`
  Get the `MenuShortcut` object associated with this menu item,
  `boolean`
  `isEnabled()`
  Checks whether this menu item is enabled.
  `String`
  `paramString()`
  Returns a string representing the state of this `MenuItem`.
  `protected void`
  `processActionEvent(ActionEvent e)`
  Processes action events occurring on this menu item, by dispatching them to any registered `ActionListener` objects.
  `protected void`
  `processEvent(AWTEvent e)`
  Processes events on this menu item.
  `void`
  `removeActionListener(ActionListener l)`
  Removes the specified action listener so it no longer receives action events from this menu item.
  `void`
  `setActionCommand(String command)`
  Sets the command name of the action event that is fired by this menu item.
  `void`
  `setEnabled(boolean b)`
  Sets whether or not this menu item can be chosen.
  `void`
  `setLabel(String label)`
  Sets the label for this menu item to the specified label.
  `void`
  `setShortcut(MenuShortcut s)`
  Set the `MenuShortcut` object associated with this menu item.

  ### Methods declared in class MenuComponent

  `dispatchEvent, getFont, getName, getParent, getTreeLock, postEvent, removeNotify, setFont, setName, toString`
  Modifier and Type
  Method
  Description
  `final void`
  `dispatchEvent(AWTEvent e)`
  Delivers an event to this component or one of its sub components.
  `Font`
  `getFont()`
  Gets the font used for this menu component.
  `String`
  `getName()`
  Gets the name of the menu component.
  `MenuContainer`
  `getParent()`
  Returns the parent container for this menu component.
  `protected final Object`
  `getTreeLock()`
  Gets this component's locking object (the object that owns the thread synchronization monitor) for AWT component-tree and layout operations.
  `boolean`
  `postEvent(Event evt)`
  Deprecated.
  As of JDK version 1.1, replaced by `dispatchEvent`.
  `void`
  `removeNotify()`
  Removes the menu component's peer.
  `void`
  `setFont(Font f)`
  Sets the font to be used for this menu component to the specified font.
  `void`
  `setName(String name)`
  Sets the name of the component to the specified string.
  `String`
  `toString()`
  Returns a representation of this menu component as a string.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

- ## Constructor Details

  - ### MenuItem

    public MenuItem() throws HeadlessException
    Constructs a new MenuItem with an empty label and no keyboard shortcut.
    Throws:
      `HeadlessException` - if GraphicsEnvironment.isHeadless() returns true.
    Since:
      1.1
    See Also:
      - `GraphicsEnvironment.isHeadless()`

  - ### MenuItem

    public MenuItem(String label) throws HeadlessException
    Constructs a new MenuItem with the specified label and no keyboard shortcut. Note that use of "-" in a label is reserved to indicate a separator between menu items. By default, all menu items except for separators are enabled.
    Parameters:
      `label` - the label for this menu item.
    Throws:
      `HeadlessException` - if GraphicsEnvironment.isHeadless() returns true.
    Since:
      1.0
    See Also:
      - `GraphicsEnvironment.isHeadless()`

  - ### MenuItem

    public MenuItem(String label, MenuShortcut s) throws HeadlessException
    Create a menu item with an associated keyboard shortcut. Note that use of "-" in a label is reserved to indicate a separator between menu items. By default, all menu items except for separators are enabled.
    Parameters:
      `label` - the label for this menu item.
      `s` - the instance of `MenuShortcut` associated with this menu item.
    Throws:
      `HeadlessException` - if GraphicsEnvironment.isHeadless() returns true.
    Since:
      1.1
    See Also:
      - `GraphicsEnvironment.isHeadless()`

- ## Method Details

  - ### addNotify

    public void addNotify()
    Creates the menu item's peer. The peer allows us to modify the appearance of the menu item without changing its functionality.

  - ### getLabel

    public String getLabel()
    Gets the label for this menu item.
    Returns:
      the label of this menu item, or `null` if this menu item has no label.
    Since:
      1.0
    See Also:
      - `setLabel(String)`

  - ### setLabel

    public void setLabel(String label)
    Sets the label for this menu item to the specified label.
    Parameters:
      `label` - the new label, or `null` for no label.
    Since:
      1.0
    See Also:
      - `getLabel()`

  - ### isEnabled

    public boolean isEnabled()
    Checks whether this menu item is enabled.
    Returns:
      `true` if the item is enabled; otherwise `false`
    Since:
      1.0
    See Also:
      - `setEnabled(boolean)`

  - ### setEnabled

    public void setEnabled(boolean b)
    Sets whether or not this menu item can be chosen.
    Parameters:
      `b` - if `true`, enables this menu item; if `false`, disables it.
    Since:
      1.1
    See Also:
      - `isEnabled()`

  - ### enable

    @Deprecated public void enable()
    Deprecated.
    As of JDK version 1.1, replaced by `setEnabled(boolean)`.

  - ### enable

    @Deprecated public void enable(boolean b)
    Deprecated.
    As of JDK version 1.1, replaced by `setEnabled(boolean)`.
    Sets whether or not this menu item can be chosen.
    Parameters:
      `b` - if `true`, enables this menu item; otherwise disables

  - ### disable

    @Deprecated public void disable()
    Deprecated.
    As of JDK version 1.1, replaced by `setEnabled(boolean)`.

  - ### getShortcut

    public MenuShortcut getShortcut()
    Get the `MenuShortcut` object associated with this menu item,
    Returns:
      the menu shortcut associated with this menu item, or `null` if none has been specified.
    Since:
      1.1
    See Also:
      - `setShortcut(MenuShortcut)`

  - ### setShortcut

    public void setShortcut(MenuShortcut s)
    Set the `MenuShortcut` object associated with this menu item. If a menu shortcut is already associated with this menu item, it is replaced.
    Parameters:
      `s` - the menu shortcut to associate with this menu item.
    Since:
      1.1
    See Also:
      - `getShortcut()`

  - ### deleteShortcut

    public void deleteShortcut()
    Delete any `MenuShortcut` object associated with this menu item.
    Since:
      1.1

  - ### enableEvents

    protected final void enableEvents(long eventsToEnable)
    Enables event delivery to this menu item for events to be defined by the specified event mask parameter

    Since event types are automatically enabled when a listener for that type is added to the menu item, this method only needs to be invoked by subclasses of `MenuItem` which desire to have the specified event types delivered to `processEvent` regardless of whether a listener is registered.

    Parameters:
      `eventsToEnable` - the event mask defining the event types
    Since:
      1.1
    See Also:
      - `processEvent(AWTEvent)`
      - `disableEvents(long)`
      - `Component.enableEvents(long)`

  - ### disableEvents

    protected final void disableEvents(long eventsToDisable)
    Disables event delivery to this menu item for events defined by the specified event mask parameter.
    Parameters:
      `eventsToDisable` - the event mask defining the event types
    Since:
      1.1
    See Also:
      - `processEvent(AWTEvent)`
      - `enableEvents(long)`
      - `Component.disableEvents(long)`

  - ### setActionCommand

    public void setActionCommand(String command)
    Sets the command name of the action event that is fired by this menu item.

    By default, the action command is set to the label of the menu item.

    Parameters:
      `command` - the action command to be set for this menu item.
    Since:
      1.1
    See Also:
      - `getActionCommand()`

  - ### getActionCommand

    public String getActionCommand()
    Gets the command name of the action event that is fired by this menu item.
    Returns:
      the action command name
    Since:
      1.1
    See Also:
      - `setActionCommand(String)`

  - ### addActionListener

    public void addActionListener(ActionListener l)
    Adds the specified action listener to receive action events from this menu item. If l is null, no exception is thrown and no action is performed.

    Refer to AWT Threading Issues for details on AWT's threading model.

    Parameters:
      `l` - the action listener.
    Since:
      1.1
    See Also:
      - `removeActionListener(ActionListener)`
      - `getActionListeners()`
      - `ActionEvent`
      - `ActionListener`

  - ### removeActionListener

    public void removeActionListener(ActionListener l)
    Removes the specified action listener so it no longer receives action events from this menu item. If l is null, no exception is thrown and no action is performed.

    Refer to AWT Threading Issues for details on AWT's threading model.

    Parameters:
      `l` - the action listener.
    Since:
      1.1
    See Also:
      - `addActionListener(ActionListener)`
      - `getActionListeners()`
      - `ActionEvent`
      - `ActionListener`

  - ### getActionListeners

    public ActionListener[] getActionListeners()
    Returns an array of all the action listeners registered on this menu item.
    Returns:
      all of this menu item's `ActionListener`s or an empty array if no action listeners are currently registered
    Since:
      1.4
    See Also:
      - `addActionListener(ActionListener)`
      - `removeActionListener(ActionListener)`
      - `ActionEvent`
      - `ActionListener`

  - ### getListeners

    public <T extends EventListener> T[] getListeners(Class<T> listenerType)
    Returns an array of all the objects currently registered as `FooListener`s upon this `MenuItem`. `FooListener`s are registered using the `addFooListener` method.

    You can specify the `listenerType` argument with a class literal, such as `FooListener.class`. For example, you can query a `MenuItem m` for its action listeners with the following code:

        ActionListener[] als = (ActionListener[])(m.getListeners(ActionListener.class));

    If no such listeners exist, this method returns an empty array.
    Type Parameters:
      `T` - the type of the listeners
    Parameters:
      `listenerType` - the type of listeners requested; this parameter should specify an interface that descends from `java.util.EventListener`
    Returns:
      an array of all objects registered as `FooListener`s on this menu item, or an empty array if no such listeners have been added
    Throws:
      `ClassCastException` - if `listenerType` doesn't specify a class or interface that implements `java.util.EventListener`
    Since:
      1.3
    See Also:
      - `getActionListeners()`

  - ### processEvent

    protected void processEvent(AWTEvent e)
    Processes events on this menu item. If the event is an instance of `ActionEvent`, it invokes `processActionEvent`, another method defined by `MenuItem`.

    Currently, menu items only support action events.

    Note that if the event parameter is `null` the behavior is unspecified and may result in an exception.

    Overrides:
      `processEvent` in class `MenuComponent`
    Parameters:
      `e` - the event
    Since:
      1.1
    See Also:
      - `processActionEvent(ActionEvent)`

  - ### processActionEvent

    protected void processActionEvent(ActionEvent e)
    Processes action events occurring on this menu item, by dispatching them to any registered `ActionListener` objects. This method is not called unless action events are enabled for this component. Action events are enabled when one of the following occurs:
    - An `ActionListener` object is registered via `addActionListener`.
    - Action events are enabled via `enableEvents`.

    Note that if the event parameter is `null` the behavior is unspecified and may result in an exception.

    Parameters:
      `e` - the action event
    Since:
      1.1
    See Also:
      - `ActionEvent`
      - `ActionListener`
      - `enableEvents(long)`

  - ### paramString

    public String paramString()
    Returns a string representing the state of this `MenuItem`. This method is intended to be used only for debugging purposes, and the content and format of the returned string may vary between implementations. The returned string may be empty but may not be `null`.
    Overrides:
      `paramString` in class `MenuComponent`
    Returns:
      the parameter string of this menu item

  - ### getAccessibleContext

    public AccessibleContext getAccessibleContext()
    Gets the AccessibleContext associated with this MenuItem. For menu items, the AccessibleContext takes the form of an AccessibleAWTMenuItem. A new AccessibleAWTMenuItem instance is created if necessary.
    Specified by:
      `getAccessibleContext` in interface `Accessible`
    Overrides:
      `getAccessibleContext` in class `MenuComponent`
    Returns:
      an AccessibleAWTMenuItem that serves as the AccessibleContext of this MenuItem
    Since:
      1.3