Module javafx.controls
Package javafx.scene.control

# Class Menu

java.lang.Object
javafx.scene.control.MenuItem
javafx.scene.control.Menu

All Implemented Interfaces:
  `Styleable`, `EventTarget`

    @DefaultProperty("items")
    public class Menu
    extends MenuItem

A popup menu of actionable items which is displayed to the user only upon request. When a menu is visible, in most use cases, the user can select one menu item before the menu goes back to its hidden state. This means the menu is a good place to put important functionality that does not necessarily need to be visible at all times to the user.

Menus are typically placed in a `MenuBar`, or as a submenu of another Menu. If the intention is to offer a context menu when the user right-clicks in a certain area of their user interface, then this is the wrong control to use. This is because when Menu is added to the scenegraph, it has a visual representation that will result in it appearing on screen. Instead, `ContextMenu` should be used in this circumstance.

Creating a Menu and inserting it into a MenuBar is easy, as shown below:

     Menu menu1 = new Menu("File");
     MenuBar menuBar = new MenuBar(menu1);

A Menu is a subclass of `MenuItem` which means that it can be inserted into a Menu's `items` ObservableList, resulting in a submenu being created:

     MenuItem menu12 = new MenuItem("Open");
     menu1.getItems().add(menu12);

The items ObservableList allows for any `MenuItem` type to be inserted, including its subclasses `Menu`, `MenuItem`, `RadioMenuItem`, `CheckMenuItem`, `CustomMenuItem` and `SeparatorMenuItem`. In order to insert an arbitrary `Node` to a Menu, a CustomMenuItem can be used. One exception to this general rule is that `SeparatorMenuItem` could be used for inserting a separator.

Since:
  JavaFX 2.0
See Also:
  `MenuBar`, `MenuItem`

- ## Property Summary

  Properties
  Type | Property | Description
  --- | --- | ---
  `ObjectProperty<EventHandler<Event>>` | `onHidden` | Called just after the `ContextMenu` has been hidden.
  `ObjectProperty<EventHandler<Event>>` | `onHiding` | Called just prior to the `ContextMenu` being hidden.
  `ObjectProperty<EventHandler<Event>>` | `onShowing` | Called just prior to the `ContextMenu` being shown, even if the menu has no items to show.
  `ObjectProperty<EventHandler<Event>>` | `onShown` | Called just after the `ContextMenu` is shown.
  `ReadOnlyBooleanProperty` | `showing` | Indicates whether the `ContextMenu` is currently visible.

  ### Properties declared in class javafx.scene.control.MenuItem

  `accelerator, disable, graphic, id, mnemonicParsing, onAction, onMenuValidation, parentMenu, parentPopup, style, text, visible`

- ## Field Summary

  Fields
  Modifier and Type | Field | Description
  --- | --- | ---
  `static EventType<Event>` | `ON_HIDDEN` | Called when the contextMenu for this menu is hidden.
  `static EventType<Event>` | `ON_HIDING` | Called when the contextMenu for this menu will be hidden.
  `static EventType<Event>` | `ON_SHOWING` | Called when the contextMenu for this menu will be shown.
  `static EventType<Event>` | `ON_SHOWN` | Called when the contextMenu for this menu shows.

  ### Fields declared in class javafx.scene.control.MenuItem

  `MENU_VALIDATION_EVENT`

- ## Constructor Summary

  Constructors
  Constructor | Description
  --- | ---
  `Menu()` | Constructs a Menu with an empty string for its display text.
  `Menu​(String text)` | Constructs a Menu and sets the display text with the specified text.
  `Menu​(String text, Node graphic)` | Constructs a Menu and sets the display text with the specified text and sets the graphic `Node` to the given node.
  `Menu​(String text, Node graphic, MenuItem... items)` | Constructs a Menu and sets the display text with the specified text, the graphic `Node` to the given node, and inserts the given items into the `items` list.

- ## Method Summary

  Modifier and Type | Method | Description
  --- | --- | ---
  `ObservableList<MenuItem>` | `getItems()` | The items to show within this menu.
  `EventHandler<Event>` | `getOnHidden()` | Gets the value of the property onHidden.
  `EventHandler<Event>` | `getOnHiding()` | Gets the value of the property onHiding.
  `EventHandler<Event>` | `getOnShowing()` | Gets the value of the property onShowing.
  `EventHandler<Event>` | `getOnShown()` | Gets the value of the property onShown.
  `void` | `hide()` | Hides the `ContextMenu` if it was previously showing, and any showing submenus.
  `boolean` | `isShowing()` | Gets the value of the property showing.
  `ObjectProperty<EventHandler<Event>>` | `onHiddenProperty()` | Called just after the `ContextMenu` has been hidden.
  `ObjectProperty<EventHandler<Event>>` | `onHidingProperty()` | Called just prior to the `ContextMenu` being hidden.
  `ObjectProperty<EventHandler<Event>>` | `onShowingProperty()` | Called just prior to the `ContextMenu` being shown, even if the menu has no items to show.
  `ObjectProperty<EventHandler<Event>>` | `onShownProperty()` | Called just after the `ContextMenu` is shown.
  `void` | `setOnHidden​(EventHandler<Event> value)` | Sets the value of the property onHidden.
  `void` | `setOnHiding​(EventHandler<Event> value)` | Sets the value of the property onHiding.
  `void` | `setOnShowing​(EventHandler<Event> value)` | Sets the value of the property onShowing.
  `void` | `setOnShown​(EventHandler<Event> value)` | Sets the value of the property onShown.
  `void` | `show()` | If the Menu is not disabled and the `ContextMenu` is not already showing, then this will cause the `ContextMenu` to be shown.
  `ReadOnlyBooleanProperty` | `showingProperty()` | Indicates whether the `ContextMenu` is currently visible.

  ### Methods declared in class javafx.scene.control.MenuItem

  `acceleratorProperty, addEventHandler, disableProperty, fire, getAccelerator, getGraphic, getOnAction, getOnMenuValidation, getParentMenu, getParentPopup, getProperties, getPseudoClassStates, getStyleableParent, getText, getTypeSelector, getUserData, graphicProperty, idProperty, isDisable, isMnemonicParsing, isVisible, mnemonicParsingProperty, onActionProperty, onMenuValidationProperty, parentMenuProperty, parentPopupProperty, removeEventHandler, setAccelerator, setDisable, setGraphic, setId, setMnemonicParsing, setOnAction, setOnMenuValidation, setParentMenu, setParentPopup, setStyle, setText, setUserData, setVisible, styleProperty, textProperty, visibleProperty`

  ### Methods declared in class java.lang.Object

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

  ### Methods declared in interface javafx.event.EventTarget

  `buildEventDispatchChain`

  ### Methods declared in interface javafx.css.Styleable

  `getCssMetaData, getId, getStyle, getStyleableNode, getStyleClass`

- ## Property Details

  - ### showing

    public final ReadOnlyBooleanProperty showingProperty
    Indicates whether the `ContextMenu` is currently visible.
    Default value:
      false
    See Also:
      `isShowing()`

  - ### onShowing

    public final ObjectProperty<EventHandler<Event>> onShowingProperty
    Called just prior to the `ContextMenu` being shown, even if the menu has no items to show. Note however that this won't be called if the menu does not have a valid anchor node.
    See Also:
      `getOnShowing()`, `setOnShowing(EventHandler)`

  - ### onShown

    public final ObjectProperty<EventHandler<Event>> onShownProperty
    Called just after the `ContextMenu` is shown.
    See Also:
      `getOnShown()`, `setOnShown(EventHandler)`

  - ### onHiding

    public final ObjectProperty<EventHandler<Event>> onHidingProperty
    Called just prior to the `ContextMenu` being hidden.
    See Also:
      `getOnHiding()`, `setOnHiding(EventHandler)`

  - ### onHidden

    public final ObjectProperty<EventHandler<Event>> onHiddenProperty
    Called just after the `ContextMenu` has been hidden.
    See Also:
      `getOnHidden()`, `setOnHidden(EventHandler)`

- ## Field Details

  - ### ON_SHOWING

    public static final EventType<Event> ON_SHOWING

    Called when the contextMenu for this menu will be shown. However if the contextMenu is empty then this will not be called.

  - ### ON_SHOWN

    public static final EventType<Event> ON_SHOWN

    Called when the contextMenu for this menu shows. However if the contextMenu is empty then this will not be called.

  - ### ON_HIDING

    public static final EventType<Event> ON_HIDING

    Called when the contextMenu for this menu will be hidden. However if the contextMenu is empty then this will not be called.

  - ### ON_HIDDEN

    public static final EventType<Event> ON_HIDDEN

    Called when the contextMenu for this menu is hidden. However if the contextMenu is empty then this will not be called.

- ## Constructor Details

  - ### Menu

    public Menu()
    Constructs a Menu with an empty string for its display text.
    Since:
      JavaFX 2.2

  - ### Menu

    public Menu​(String text)
    Constructs a Menu and sets the display text with the specified text.
    Parameters:
      `text` - the text to display on the menu button

  - ### Menu

    public Menu​(String text, Node graphic)
    Constructs a Menu and sets the display text with the specified text and sets the graphic `Node` to the given node.
    Parameters:
      `text` - the text to display on the menu button
      `graphic` - the graphic to display on the menu button

  - ### Menu

    public Menu​(String text, Node graphic, MenuItem... items)
    Constructs a Menu and sets the display text with the specified text, the graphic `Node` to the given node, and inserts the given items into the `items` list.
    Parameters:
      `text` - the text to display on the menu button
      `graphic` - the graphic to display on the menu button
      `items` - The items to display in the popup menu.
    Since:
      JavaFX 8u40

- ## Method Details

  - ### isShowing

    public final boolean isShowing()
    Gets the value of the property showing.
    Property description:
      Indicates whether the `ContextMenu` is currently visible.
    Default value:
      false

  - ### showingProperty

    public final ReadOnlyBooleanProperty showingProperty()
    Indicates whether the `ContextMenu` is currently visible.
    Default value:
      false
    See Also:
      `isShowing()`

  - ### onShowingProperty

    public final ObjectProperty<EventHandler<Event>> onShowingProperty()
    Called just prior to the `ContextMenu` being shown, even if the menu has no items to show. Note however that this won't be called if the menu does not have a valid anchor node.
    See Also:
      `getOnShowing()`, `setOnShowing(EventHandler)`

  - ### setOnShowing

    public final void setOnShowing​(EventHandler<Event> value)
    Sets the value of the property onShowing.
    Property description:
      Called just prior to the `ContextMenu` being shown, even if the menu has no items to show. Note however that this won't be called if the menu does not have a valid anchor node.

  - ### getOnShowing

    public final EventHandler<Event> getOnShowing()
    Gets the value of the property onShowing.
    Property description:
      Called just prior to the `ContextMenu` being shown, even if the menu has no items to show. Note however that this won't be called if the menu does not have a valid anchor node.

  - ### onShownProperty

    public final ObjectProperty<EventHandler<Event>> onShownProperty()
    Called just after the `ContextMenu` is shown.
    See Also:
      `getOnShown()`, `setOnShown(EventHandler)`

  - ### setOnShown

    public final void setOnShown​(EventHandler<Event> value)
    Sets the value of the property onShown.
    Property description:
      Called just after the `ContextMenu` is shown.

  - ### getOnShown

    public final EventHandler<Event> getOnShown()
    Gets the value of the property onShown.
    Property description:
      Called just after the `ContextMenu` is shown.

  - ### onHidingProperty

    public final ObjectProperty<EventHandler<Event>> onHidingProperty()
    Called just prior to the `ContextMenu` being hidden.
    See Also:
      `getOnHiding()`, `setOnHiding(EventHandler)`

  - ### setOnHiding

    public final void setOnHiding​(EventHandler<Event> value)
    Sets the value of the property onHiding.
    Property description:
      Called just prior to the `ContextMenu` being hidden.

  - ### getOnHiding

    public final EventHandler<Event> getOnHiding()
    Gets the value of the property onHiding.
    Property description:
      Called just prior to the `ContextMenu` being hidden.

  - ### onHiddenProperty

    public final ObjectProperty<EventHandler<Event>> onHiddenProperty()
    Called just after the `ContextMenu` has been hidden.
    See Also:
      `getOnHidden()`, `setOnHidden(EventHandler)`

  - ### setOnHidden

    public final void setOnHidden​(EventHandler<Event> value)
    Sets the value of the property onHidden.
    Property description:
      Called just after the `ContextMenu` has been hidden.

  - ### getOnHidden

    public final EventHandler<Event> getOnHidden()
    Gets the value of the property onHidden.
    Property description:
      Called just after the `ContextMenu` has been hidden.

  - ### getItems

    public final ObservableList<MenuItem> getItems()
    The items to show within this menu. If this ObservableList is modified at runtime, the Menu will update as expected.
    Returns:
      the list of items

  - ### show

    public void show()
    If the Menu is not disabled and the `ContextMenu` is not already showing, then this will cause the `ContextMenu` to be shown.

  - ### hide

    public void hide()
    Hides the `ContextMenu` if it was previously showing, and any showing submenus. If this menu is not showing, then invoking this function has no effect.