Menu (Java SE 26 & JDK 26)
Description: declaration: module: java.desktop, package: java.awt, class: Menu
Keywords: java.awt.Menu class

# Class Menu

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

All Implemented Interfaces:
  `MenuContainer, Serializable, Accessible`

Direct Known Subclasses:
  `PopupMenu`

public class Menu extends MenuItem implements MenuContainer, Accessible
A `Menu` object is a pull-down menu component that is deployed from a menu bar.

A menu can optionally be a tear-off menu. A tear-off menu can be opened and dragged away from its parent menu bar or menu. It remains on the screen after the mouse button has been released. The mechanism for tearing off a menu is platform dependent, since the look and feel of the tear-off menu is determined by its peer. On platforms that do not support tear-off menus, the tear-off property is ignored.

Each item in a menu must belong to the `MenuItem` class. It can be an instance of `MenuItem`, a submenu (an instance of `Menu`), or a check box (an instance of `CheckboxMenuItem`).

Since:
  1.0
See Also:
  - `MenuItem`
  - `CheckboxMenuItem`
  - Serialized Form

- ## Nested Class Summary

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

  ### Nested classes/interfaces declared in class MenuItem

  `MenuItem.AccessibleAWTMenuItem`
  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
  `Menu()`
  Constructs a new menu with an empty label.
  `Menu(String label)`
  Constructs a new menu with the specified label.
  `Menu(String label, boolean tearOff)`
  Constructs a new menu with the specified label, indicating whether the menu can be torn off.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `MenuItem`
  `add(MenuItem mi)`
  Adds the specified menu item to this menu.
  `void`
  `add(String label)`
  Adds an item with the specified label to this menu.
  `void`
  `addNotify()`
  Creates the menu's peer.
  `void`
  `addSeparator()`
  Adds a separator line, or a hyphen, to the menu at the current position.
  `int`
  `countItems()`
  Deprecated.
  As of JDK version 1.1, replaced by `getItemCount()`.
  `AccessibleContext`
  `getAccessibleContext()`
  Gets the AccessibleContext associated with this Menu.
  `MenuItem`
  `getItem(int index)`
  Gets the item located at the specified index of this menu.
  `int`
  `getItemCount()`
  Get the number of items in this menu.
  `void`
  `insert(MenuItem menuitem, int index)`
  Inserts a menu item into this menu at the specified position.
  `void`
  `insert(String label, int index)`
  Inserts a menu item with the specified label into this menu at the specified position.
  `void`
  `insertSeparator(int index)`
  Inserts a separator at the specified position.
  `boolean`
  `isTearOff()`
  Indicates whether this menu is a tear-off menu.
  `String`
  `paramString()`
  Returns a string representing the state of this `Menu`.
  `void`
  `remove(int index)`
  Removes the menu item at the specified index from this menu.
  `void`
  `remove(MenuComponent item)`
  Removes the specified menu item from this menu.
  `void`
  `removeAll()`
  Removes all items from this menu.
  `void`
  `removeNotify()`
  Removes the menu's peer.

  ### Methods declared in class MenuItem

  `addActionListener, deleteShortcut, disable, disableEvents, enable, enable, enableEvents, getActionCommand, getActionListeners, getLabel, getListeners, getShortcut, isEnabled, processActionEvent, processEvent, removeActionListener, setActionCommand, setEnabled, setLabel, setShortcut`
  Modifier and Type
  Method
  Description
  `void`
  `addActionListener(ActionListener l)`
  Adds the specified action listener to receive action events from this menu item.
  `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
  `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.
  `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, 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`
  `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.

  ### Methods declared in interface MenuContainer

  `getFont, postEvent`
  Modifier and Type
  Method
  Description
  `Font`
  `getFont()`
  Returns the font in use by this container.
  `boolean`
  `postEvent(Event evt)`
  Deprecated.
  As of JDK version 1.1 replaced by dispatchEvent(AWTEvent).

- ## Constructor Details

  - ### Menu

    public Menu() throws HeadlessException
    Constructs a new menu with an empty label. This menu is not a tear-off menu.
    Throws:
      `HeadlessException` - if GraphicsEnvironment.isHeadless() returns true.
    Since:
      1.1
    See Also:
      - `GraphicsEnvironment.isHeadless()`

  - ### Menu

    public Menu(String label) throws HeadlessException
    Constructs a new menu with the specified label. This menu is not a tear-off menu.
    Parameters:
      `label` - the menu's label in the menu bar, or in another menu of which this menu is a submenu.
    Throws:
      `HeadlessException` - if GraphicsEnvironment.isHeadless() returns true.
    See Also:
      - `GraphicsEnvironment.isHeadless()`

  - ### Menu

    public Menu(String label, boolean tearOff) throws HeadlessException
    Constructs a new menu with the specified label, indicating whether the menu can be torn off.

    Tear-off functionality may not be supported by all implementations of AWT. If a particular implementation doesn't support tear-off menus, this value is silently ignored.

    Parameters:
      `label` - the menu's label in the menu bar, or in another menu of which this menu is a submenu.
      `tearOff` - if `true`, the menu is a tear-off menu.
    Throws:
      `HeadlessException` - if GraphicsEnvironment.isHeadless() returns true.
    See Also:
      - `GraphicsEnvironment.isHeadless()`

- ## Method Details

  - ### addNotify

    public void addNotify()
    Creates the menu's peer. The peer allows us to modify the appearance of the menu without changing its functionality.
    Overrides:
      `addNotify` in class `MenuItem`

  - ### removeNotify

    public void removeNotify()
    Removes the menu's peer. The peer allows us to modify the appearance of the menu without changing its functionality.
    Overrides:
      `removeNotify` in class `MenuComponent`

  - ### isTearOff

    public boolean isTearOff()
    Indicates whether this menu is a tear-off menu.

    Tear-off functionality may not be supported by all implementations of AWT. If a particular implementation doesn't support tear-off menus, this value is silently ignored.

    Returns:
      `true` if this is a tear-off menu; `false` otherwise.

  - ### getItemCount

    public int getItemCount()
    Get the number of items in this menu.
    Returns:
      the number of items in this menu
    Since:
      1.1

  - ### countItems

    @Deprecated public int countItems()
    Deprecated.
    As of JDK version 1.1, replaced by `getItemCount()`.
    Returns the number of items in this menu.
    Returns:
      the number of items in this menu

  - ### getItem

    public MenuItem getItem(int index)
    Gets the item located at the specified index of this menu.
    Parameters:
      `index` - the position of the item to be returned.
    Returns:
      the item located at the specified index.

  - ### add

    public MenuItem add(MenuItem mi)
    Adds the specified menu item to this menu. If the menu item has been part of another menu, removes it from that menu.
    Parameters:
      `mi` - the menu item to be added
    Returns:
      the menu item added
    See Also:
      - `insert(java.lang.String, int)`
      - `insert(java.awt.MenuItem, int)`

  - ### add

    public void add(String label)
    Adds an item with the specified label to this menu.
    Parameters:
      `label` - the text on the item
    See Also:
      - `insert(java.lang.String, int)`
      - `insert(java.awt.MenuItem, int)`

  - ### insert

    public void insert(MenuItem menuitem, int index)
    Inserts a menu item into this menu at the specified position.
    Parameters:
      `menuitem` - the menu item to be inserted.
      `index` - the position at which the menu item should be inserted.
    Throws:
      `IllegalArgumentException` - if the value of `index` is less than zero
    Since:
      1.1
    See Also:
      - `add(java.lang.String)`
      - `add(java.awt.MenuItem)`

  - ### insert

    public void insert(String label, int index)
    Inserts a menu item with the specified label into this menu at the specified position. This is a convenience method for `insert(menuItem, index)`.
    Parameters:
      `label` - the text on the item
      `index` - the position at which the menu item should be inserted
    Throws:
      `IllegalArgumentException` - if the value of `index` is less than zero
    Since:
      1.1
    See Also:
      - `add(java.lang.String)`
      - `add(java.awt.MenuItem)`

  - ### addSeparator

    public void addSeparator()
    Adds a separator line, or a hyphen, to the menu at the current position.
    See Also:
      - `insertSeparator(int)`

  - ### insertSeparator

    public void insertSeparator(int index)
    Inserts a separator at the specified position.
    Parameters:
      `index` - the position at which the menu separator should be inserted.
    Throws:
      `IllegalArgumentException` - if the value of `index` is less than 0.
    Since:
      1.1
    See Also:
      - `addSeparator()`

  - ### remove

    public void remove(int index)
    Removes the menu item at the specified index from this menu.
    Parameters:
      `index` - the position of the item to be removed.

  - ### remove

    public void remove(MenuComponent item)
    Removes the specified menu item from this menu.
    Specified by:
      `remove` in interface `MenuContainer`
    Parameters:
      `item` - the item to be removed from the menu. If `item` is `null` or is not in this menu, this method does nothing.

  - ### removeAll

    public void removeAll()
    Removes all items from this menu.
    Since:
      1.1

  - ### paramString

    public String paramString()
    Returns a string representing the state of this `Menu`. 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 `MenuItem`
    Returns:
      the parameter string of this menu

  - ### getAccessibleContext

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