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
  `final ObjectProperty<EventHandler<Event>>`
  `onHidden`
  Called just after the `ContextMenu` has been hidden.
  `final ObjectProperty<EventHandler<Event>>`
  `onHiding`
  Called just prior to the `ContextMenu` being hidden.
  `final ObjectProperty<EventHandler<Event>>`
  `onShowing`
  Called just prior to the `ContextMenu` being shown, even if the menu has no items to show.
  `final ObjectProperty<EventHandler<Event>>`
  `onShown`
  Called just after the `ContextMenu` is shown.
  `final 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 final EventType<Event>`
  `ON_HIDDEN`
  Called when the contextMenu for this menu is hidden.
  `static final EventType<Event>`
  `ON_HIDING`
  Called when the contextMenu for this menu will be hidden.
  `static final EventType<Event>`
  `ON_SHOWING`
  Called when the contextMenu for this menu will be shown.
  `static final 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
  `final ObservableList<MenuItem>`
  `getItems()`
  The items to show within this menu.
  `final EventHandler<Event>`
  `getOnHidden()`
  Gets the value of the property onHidden.
  `final EventHandler<Event>`
  `getOnHiding()`
  Gets the value of the property onHiding.
  `final EventHandler<Event>`
  `getOnShowing()`
  Gets the value of the property onShowing.
  `final EventHandler<Event>`
  `getOnShown()`
  Gets the value of the property onShown.
  `void`
  `hide()`
  Hides the `ContextMenu` if it was previously showing, and any showing submenus.
  `final boolean`
  `isShowing()`
  Gets the value of the property showing.
  `final ObjectProperty<EventHandler<Event>>`
  `onHiddenProperty()`
  Called just after the `ContextMenu` has been hidden.
  `final ObjectProperty<EventHandler<Event>>`
  `onHidingProperty()`
  Called just prior to the `ContextMenu` being hidden.
  `final ObjectProperty<EventHandler<Event>>`
  `onShowingProperty()`
  Called just prior to the `ContextMenu` being shown, even if the menu has no items to show.
  `final ObjectProperty<EventHandler<Event>>`
  `onShownProperty()`
  Called just after the `ContextMenu` is shown.
  `final void`
  `setOnHidden(EventHandler<Event> value)`
  Sets the value of the property onHidden.
  `final void`
  `setOnHiding(EventHandler<Event> value)`
  Sets the value of the property onHiding.
  `final void`
  `setOnShowing(EventHandler<Event> value)`
  Sets the value of the property onShowing.
  `final 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.
  `final ReadOnlyBooleanProperty`
  `showingProperty()`
  Indicates whether the `ContextMenu` is currently visible.

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

  `acceleratorProperty, addEventHandler, buildEventDispatchChain, disableProperty, fire, getAccelerator, getCssMetaData, getGraphic, getId, getOnAction, getOnMenuValidation, getParentMenu, getParentPopup, getProperties, getPseudoClassStates, getStyle, getStyleableParent, getStyleClass, 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.css.Styleable

  `getStyleableNode`

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