JMenuBar (Java Platform SE 8 )
Keywords: javax.swing.JMenuBar class
Date: 2026-04-24

javax.swing

## Class JMenuBar

- java.lang.Object
- - java.awt.Component
  - - java.awt.Container
    - - javax.swing.JComponent
      - - javax.swing.JMenuBar

- All Implemented Interfaces:
    ImageObserver, MenuContainer, Serializable, Accessible, MenuElement
  Direct Known Subclasses:
    BasicInternalFrameTitlePane.SystemMenuBar

      public class JMenuBar
      extends JComponent
      implements Accessible, MenuElement

  An implementation of a menu bar. You add `JMenu` objects to the menu bar to construct a menu. When the user selects a `JMenu` object, its associated `JPopupMenu` is displayed, allowing the user to select one of the `JMenuItems` on it.

  For information and examples of using menu bars see How to Use Menus, a section in The Java Tutorial.

  Warning: Swing is not thread safe. For more information see Swing's Threading Policy.

  Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeans™ has been added to the `java.beans` package. Please see `XMLEncoder`.

  Warning: By default, pressing the Tab key does not transfer focus from a `JMenuBar` which is added to a container together with other Swing components, because the `focusTraversalKeysEnabled` property of `JMenuBar` is set to `false`. To resolve this, you should call the `JMenuBar.setFocusTraversalKeysEnabled(true)` method.

  See Also:
    `JMenu`, `JPopupMenu`, `JMenuItem`

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected class` | `JMenuBar.AccessibleJMenuBar` This class implements accessibility support for the `JMenuBar` class.

    - ### Nested classes/interfaces inherited from class javax.swing.JComponent

      `JComponent.AccessibleJComponent`

    - ### Nested classes/interfaces inherited from class java.awt.Container

      `Container.AccessibleAWTContainer`

    - ### Nested classes/interfaces inherited from class java.awt.Component

      `Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy`

  - ### Field Summary

    - ### Fields inherited from class javax.swing.JComponent

      `listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW`

    - ### Fields inherited from class java.awt.Component

      `accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT`

    - ### Fields inherited from interface java.awt.image.ImageObserver

      `ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JMenuBar()` Creates a new menu bar.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods Deprecated Methods
    Modifier and Type | Method and Description
    --- | ---
    `JMenu` | `add(JMenu c)` Appends the specified menu to the end of the menu bar.
    `void` | `addNotify()` Overrides `JComponent.addNotify` to register this menu bar with the current keyboard manager.
    `AccessibleContext` | `getAccessibleContext()` Gets the AccessibleContext associated with this JMenuBar.
    `Component` | `getComponent()` Implemented to be a `MenuElement`.
    `Component` | `getComponentAtIndex(int i)` Deprecated. replaced by `getComponent(int i)`
    `int` | `getComponentIndex(Component c)` Returns the index of the specified component.
    `JMenu` | `getHelpMenu()` Gets the help menu for the menu bar.
    `Insets` | `getMargin()` Returns the margin between the menubar's border and its menus.
    `JMenu` | `getMenu(int index)` Returns the menu at the specified position in the menu bar.
    `int` | `getMenuCount()` Returns the number of items in the menu bar.
    `SingleSelectionModel` | `getSelectionModel()` Returns the model object that handles single selections.
    `MenuElement[]` | `getSubElements()` Implemented to be a `MenuElement` -- returns the menus in this menu bar.
    `MenuBarUI` | `getUI()` Returns the menubar's current UI.
    `String` | `getUIClassID()` Returns the name of the L&F class that renders this component.
    `boolean` | `isBorderPainted()` Returns true if the menu bars border should be painted.
    `boolean` | `isSelected()` Returns true if the menu bar currently has a component selected.
    `void` | `menuSelectionChanged(boolean isIncluded)` Implemented to be a `MenuElement` -- does nothing.
    `protected void` | `paintBorder(Graphics g)` Paints the menubar's border if `BorderPainted` property is true.
    `protected String` | `paramString()` Returns a string representation of this `JMenuBar`.
    `protected boolean` | `processKeyBinding(KeyStroke ks, KeyEvent e, int condition, boolean pressed)` Subclassed to check all the child menus.
    `void` | `processKeyEvent(KeyEvent e, MenuElement[] path, MenuSelectionManager manager)` Implemented to be a `MenuElement` -- does nothing.
    `void` | `processMouseEvent(MouseEvent event, MenuElement[] path, MenuSelectionManager manager)` Implemented to be a `MenuElement` -- does nothing.
    `void` | `removeNotify()` Overrides `JComponent.removeNotify` to unregister this menu bar with the current keyboard manager.
    `void` | `setBorderPainted(boolean b)` Sets whether the border should be painted.
    `void` | `setHelpMenu(JMenu menu)` Sets the help menu that appears when the user selects the "help" option in the menu bar.
    `void` | `setMargin(Insets m)` Sets the margin between the menubar's border and its menus.
    `void` | `setSelected(Component sel)` Sets the currently selected component, producing a a change to the selection model.
    `void` | `setSelectionModel(SingleSelectionModel model)` Sets the model object to handle single selections.
    `void` | `setUI(MenuBarUI ui)` Sets the L&F object that renders this component.
    `void` | `updateUI()` Resets the UI property with a value from the current look and feel.

    - ### Methods inherited from class javax.swing.JComponent

      `addAncestorListener, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update`

    - ### Methods inherited from class java.awt.Container

      `add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree`

    - ### Methods inherited from class java.awt.Component

      `action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle`

    - ### Methods inherited from class java.lang.Object

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

- - ### Constructor Detail

    - #### JMenuBar

          public JMenuBar()

      Creates a new menu bar.

  - ### Method Detail

    - #### getUI

          public MenuBarUI getUI()

      Returns the menubar's current UI.
      See Also:
        `setUI(javax.swing.plaf.MenuBarUI)`

    - #### setUI

          public void setUI(MenuBarUI ui)

      Sets the L&F object that renders this component.
      Parameters:
        `ui` - the new MenuBarUI L&F object
      See Also:
        `UIDefaults.getUI(javax.swing.JComponent)`

    - #### updateUI

          public void updateUI()

      Resets the UI property with a value from the current look and feel.
      Overrides:
        `updateUI` in class `JComponent`
      See Also:
        `JComponent.updateUI()`

    - #### getUIClassID

          public String getUIClassID()

      Returns the name of the L&F class that renders this component.
      Overrides:
        `getUIClassID` in class `JComponent`
      Returns:
        the string "MenuBarUI"
      See Also:
        `JComponent.getUIClassID()`, `UIDefaults.getUI(javax.swing.JComponent)`

    - #### getSelectionModel

          public SingleSelectionModel getSelectionModel()

      Returns the model object that handles single selections.
      Returns:
        the `SingleSelectionModel` property
      See Also:
        `SingleSelectionModel`

    - #### setSelectionModel

          public void setSelectionModel(SingleSelectionModel model)

      Sets the model object to handle single selections.
      Parameters:
        `model` - the `SingleSelectionModel` to use
      See Also:
        `SingleSelectionModel`

    - #### add

          public JMenu add(JMenu c)

      Appends the specified menu to the end of the menu bar.
      Parameters:
        `c` - the `JMenu` component to add
      Returns:
        the menu component

    - #### getMenu

          public JMenu getMenu(int index)

      Returns the menu at the specified position in the menu bar.
      Parameters:
        `index` - an integer giving the position in the menu bar, where 0 is the first position
      Returns:
        the `JMenu` at that position, or `null` if if there is no `JMenu` at that position (ie. if it is a `JMenuItem`)

    - #### getMenuCount

          public int getMenuCount()

      Returns the number of items in the menu bar.
      Returns:
        the number of items in the menu bar

    - #### setHelpMenu

          public void setHelpMenu(JMenu menu)

      Sets the help menu that appears when the user selects the "help" option in the menu bar. This method is not yet implemented and will throw an exception.
      Parameters:
        `menu` - the JMenu that delivers help to the user

    - #### getHelpMenu

          public JMenu getHelpMenu()

      Gets the help menu for the menu bar. This method is not yet implemented and will throw an exception.
      Returns:
        the `JMenu` that delivers help to the user

    - #### getComponentAtIndex

          @Deprecated
          public Component getComponentAtIndex(int i)

      Deprecated. replaced by `getComponent(int i)`
      Returns the component at the specified index.
      Parameters:
        `i` - an integer specifying the position, where 0 is first
      Returns:
        the `Component` at the position, or `null` for an invalid index

    - #### getComponentIndex

          public int getComponentIndex(Component c)

      Returns the index of the specified component.
      Parameters:
        `c` - the `Component` to find
      Returns:
        an integer giving the component's position, where 0 is first; or -1 if it can't be found

    - #### setSelected

          public void setSelected(Component sel)

      Sets the currently selected component, producing a a change to the selection model.
      Parameters:
        `sel` - the `Component` to select

    - #### isSelected

          public boolean isSelected()

      Returns true if the menu bar currently has a component selected.
      Returns:
        true if a selection has been made, else false

    - #### isBorderPainted

          public boolean isBorderPainted()

      Returns true if the menu bars border should be painted.
      Returns:
        true if the border should be painted, else false

    - #### setBorderPainted

          public void setBorderPainted(boolean b)

      Sets whether the border should be painted.
      Parameters:
        `b` - if true and border property is not `null`, the border is painted.
      See Also:
        `isBorderPainted()`

    - #### paintBorder

          protected void paintBorder(Graphics g)

      Paints the menubar's border if `BorderPainted` property is true.
      Overrides:
        `paintBorder` in class `JComponent`
      Parameters:
        `g` - the `Graphics` context to use for painting
      See Also:
        `JComponent.paint(java.awt.Graphics)`, `JComponent.setBorder(javax.swing.border.Border)`

    - #### setMargin

          public void setMargin(Insets m)

      Sets the margin between the menubar's border and its menus. Setting to `null` will cause the menubar to use the default margins.
      Parameters:
        `m` - an Insets object containing the margin values
      See Also:
        `Insets`

    - #### getMargin

          public Insets getMargin()

      Returns the margin between the menubar's border and its menus. If there is no previous margin, it will create a default margin with zero size.
      Returns:
        an `Insets` object containing the margin values
      See Also:
        `Insets`

    - #### processMouseEvent

          public void processMouseEvent(MouseEvent event,
                                        MenuElement[] path,
                                        MenuSelectionManager manager)

      Implemented to be a `MenuElement` -- does nothing.
      Specified by:
        `processMouseEvent` in interface `MenuElement`
      See Also:
        `getSubElements()`

    - #### processKeyEvent

          public void processKeyEvent(KeyEvent e,
                                      MenuElement[] path,
                                      MenuSelectionManager manager)

      Implemented to be a `MenuElement` -- does nothing.
      Specified by:
        `processKeyEvent` in interface `MenuElement`
      See Also:
        `getSubElements()`

    - #### menuSelectionChanged

          public void menuSelectionChanged(boolean isIncluded)

      Implemented to be a `MenuElement` -- does nothing.
      Specified by:
        `menuSelectionChanged` in interface `MenuElement`
      See Also:
        `getSubElements()`

    - #### getSubElements

          public MenuElement[] getSubElements()

      Implemented to be a `MenuElement` -- returns the menus in this menu bar. This is the reason for implementing the `MenuElement` interface -- so that the menu bar can be treated the same as other menu elements.
      Specified by:
        `getSubElements` in interface `MenuElement`
      Returns:
        an array of menu items in the menu bar.

    - #### getComponent

          public Component getComponent()

      Implemented to be a `MenuElement`. Returns this object.
      Specified by:
        `getComponent` in interface `MenuElement`
      Returns:
        the current `Component` (this)
      See Also:
        `getSubElements()`

    - #### paramString

          protected String paramString()

      Returns a string representation of this `JMenuBar`. 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 `JComponent`
      Returns:
        a string representation of this `JMenuBar`

    - #### getAccessibleContext

          public AccessibleContext getAccessibleContext()

      Gets the AccessibleContext associated with this JMenuBar. For JMenuBars, the AccessibleContext takes the form of an AccessibleJMenuBar. A new AccessibleJMenuBar instance is created if necessary.
      Specified by:
        `getAccessibleContext` in interface `Accessible`
      Overrides:
        `getAccessibleContext` in class `Component`
      Returns:
        an AccessibleJMenuBar that serves as the AccessibleContext of this JMenuBar

    - #### processKeyBinding

          protected boolean processKeyBinding(KeyStroke ks,
                                              KeyEvent e,
                                              int condition,
                                              boolean pressed)

      Subclassed to check all the child menus.
      Overrides:
        `processKeyBinding` in class `JComponent`
      Parameters:
        `ks` - the `KeyStroke` queried
        `e` - the `KeyEvent`
        `condition` - one of the following values:
        - JComponent.WHEN_FOCUSED
        - JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT
        - JComponent.WHEN_IN_FOCUSED_WINDOW
        `pressed` - true if the key is pressed
      Returns:
        true if there was a binding to an action, and the action was enabled
      Since:
        1.3

    - #### addNotify

          public void addNotify()

      Overrides `JComponent.addNotify` to register this menu bar with the current keyboard manager.
      Overrides:
        `addNotify` in class `JComponent`
      See Also:
        `JComponent.registerKeyboardAction(java.awt.event.ActionListener, java.lang.String, javax.swing.KeyStroke, int)`

    - #### removeNotify

          public void removeNotify()

      Overrides `JComponent.removeNotify` to unregister this menu bar with the current keyboard manager.
      Overrides:
        `removeNotify` in class `JComponent`
      See Also:
        `JComponent.registerKeyboardAction(java.awt.event.ActionListener, java.lang.String, javax.swing.KeyStroke, int)`

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2026, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.