javax.swing.plaf.basic

## Class BasicMenuItemUI

- java.lang.Object
- - javax.swing.plaf.ComponentUI
  - - javax.swing.plaf.ButtonUI
    - - javax.swing.plaf.MenuItemUI
      - - javax.swing.plaf.basic.BasicMenuItemUI

- Direct Known Subclasses:
    BasicCheckBoxMenuItemUI, BasicMenuUI, BasicRadioButtonMenuItemUI, SynthMenuItemUI

      public class BasicMenuItemUI
      extends MenuItemUI

  BasicMenuItem implementation

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `protected class` | `BasicMenuItemUI.MouseInputHandler` |

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected String` | `acceleratorDelimiter` | Accelerator delimiter string, such as `'+'` in `'Ctrl+C'`.
    `protected Font` | `acceleratorFont` |
    `protected Color` | `acceleratorForeground` |
    `protected Color` | `acceleratorSelectionForeground` |
    `protected Icon` | `arrowIcon` |
    `protected Icon` | `checkIcon` |
    `protected int` | `defaultTextIconGap` |
    `protected Color` | `disabledForeground` |
    `protected MenuDragMouseListener` | `menuDragMouseListener` |
    `protected JMenuItem` | `menuItem` |
    `protected MenuKeyListener` | `menuKeyListener` |
    `protected MouseInputListener` | `mouseInputListener` |
    `protected boolean` | `oldBorderPainted` |
    `protected PropertyChangeListener` | `propertyChangeListener` | `PropertyChangeListener` returned from `createPropertyChangeListener`.
    `protected Color` | `selectionBackground` |
    `protected Color` | `selectionForeground` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `BasicMenuItemUI()` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected MenuDragMouseListener` | `createMenuDragMouseListener(JComponent c)` |
    `protected MenuKeyListener` | `createMenuKeyListener(JComponent c)` |
    `protected MouseInputListener` | `createMouseInputListener(JComponent c)` |
    `protected PropertyChangeListener` | `createPropertyChangeListener(JComponent c)` | Creates a `PropertyChangeListener` which will be added to the menu item.
    `static ComponentUI` | `createUI(JComponent c)` |
    `protected void` | `doClick(MenuSelectionManager msm)` | Call this method when a menu item is to be activated.
    `Dimension` | `getMaximumSize(JComponent c)` | Returns the specified component's maximum size appropriate for the look and feel.
    `Dimension` | `getMinimumSize(JComponent c)` | Returns the specified component's minimum size appropriate for the look and feel.
    `MenuElement[]` | `getPath()` |
    `protected Dimension` | `getPreferredMenuItemSize(JComponent c, Icon checkIcon, Icon arrowIcon, int defaultTextIconGap)` |
    `Dimension` | `getPreferredSize(JComponent c)` | Returns the specified component's preferred size appropriate for the look and feel.
    `protected String` | `getPropertyPrefix()` |
    `protected void` | `installComponents(JMenuItem menuItem)` |
    `protected void` | `installDefaults()` |
    `protected void` | `installKeyboardActions()` |
    `protected void` | `installListeners()` |
    `void` | `installUI(JComponent c)` | Configures the specified component appropriately for the look and feel.
    `void` | `paint(Graphics g, JComponent c)` | Paints the specified component appropriately for the look and feel.
    `protected void` | `paintBackground(Graphics g, JMenuItem menuItem, Color bgColor)` | Draws the background of the menu item.
    `protected void` | `paintMenuItem(Graphics g, JComponent c, Icon checkIcon, Icon arrowIcon, Color background, Color foreground, int defaultTextIconGap)` |
    `protected void` | `paintText(Graphics g, JMenuItem menuItem, Rectangle textRect, String text)` | Renders the text of the current menu item.
    `protected void` | `uninstallComponents(JMenuItem menuItem)` |
    `protected void` | `uninstallDefaults()` |
    `protected void` | `uninstallKeyboardActions()` |
    `protected void` | `uninstallListeners()` |
    `void` | `uninstallUI(JComponent c)` | Reverses configuration which was done on the specified component during `installUI`.
    `void` | `update(Graphics g, JComponent c)` | We draw the background in paintMenuItem() so override update (which fills the background of opaque components by default) to just call paint().

    - ### Methods inherited from class javax.swing.plaf.ComponentUI

      `contains, getAccessibleChild, getAccessibleChildrenCount, getBaseline, getBaselineResizeBehavior`

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

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

- - ### Field Detail

    - #### menuItem

          protected JMenuItem menuItem

    - #### selectionBackground

          protected Color selectionBackground

    - #### selectionForeground

          protected Color selectionForeground

    - #### disabledForeground

          protected Color disabledForeground

    - #### acceleratorForeground

          protected Color acceleratorForeground

    - #### acceleratorSelectionForeground

          protected Color acceleratorSelectionForeground

    - #### acceleratorDelimiter

          protected String acceleratorDelimiter

      Accelerator delimiter string, such as `'+'` in `'Ctrl+C'`.
      Since:
        1.7

    - #### defaultTextIconGap

          protected int defaultTextIconGap

    - #### acceleratorFont

          protected Font acceleratorFont

    - #### mouseInputListener

          protected MouseInputListener mouseInputListener

    - #### menuDragMouseListener

          protected MenuDragMouseListener menuDragMouseListener

    - #### menuKeyListener

          protected MenuKeyListener menuKeyListener

    - #### propertyChangeListener

          protected PropertyChangeListener propertyChangeListener

      `PropertyChangeListener` returned from `createPropertyChangeListener`. You should not need to access this field, rather if you want to customize the `PropertyChangeListener` override `createPropertyChangeListener`.
      Since:
        1.6
      See Also:
        `createPropertyChangeListener(javax.swing.JComponent)`

    - #### arrowIcon

          protected Icon arrowIcon

    - #### checkIcon

          protected Icon checkIcon

    - #### oldBorderPainted

          protected boolean oldBorderPainted

  - ### Constructor Detail

    - #### BasicMenuItemUI

          public BasicMenuItemUI()

  - ### Method Detail

    - #### createUI

          public static ComponentUI createUI(JComponent c)

    - #### installUI

          public void installUI(JComponent c)

      Description copied from class: `ComponentUI`
      Configures the specified component appropriately for the look and feel. This method is invoked when the `ComponentUI` instance is being installed as the UI delegate on the specified component. This method should completely configure the component for the look and feel, including the following:
      1. Install default property values for color, fonts, borders, icons, opacity, etc. on the component. Whenever possible, property values initialized by the client program should not be overridden.
      2. Install a `LayoutManager` on the component if necessary.
      3. Create/add any required sub-components to the component.
      4. Create/install event listeners on the component.
      5. Create/install a `PropertyChangeListener` on the component in order to detect and respond to component property changes appropriately.
      6. Install keyboard UI (mnemonics, traversal, etc.) on the component.
      7. Initialize any appropriate instance data.
      Overrides:
        `installUI` in class `ComponentUI`
      Parameters:
        `c` - the component where this UI delegate is being installed
      See Also:
        `ComponentUI.uninstallUI(javax.swing.JComponent)`, `JComponent.setUI(javax.swing.plaf.ComponentUI)`, `JComponent.updateUI()`

    - #### installDefaults

          protected void installDefaults()

    - #### installComponents

          protected void installComponents(JMenuItem menuItem)

      Since:
        1.3

    - #### getPropertyPrefix

          protected String getPropertyPrefix()

    - #### installListeners

          protected void installListeners()

    - #### installKeyboardActions

          protected void installKeyboardActions()

    - #### uninstallUI

          public void uninstallUI(JComponent c)

      Description copied from class: `ComponentUI`
      Reverses configuration which was done on the specified component during `installUI`. This method is invoked when this `UIComponent` instance is being removed as the UI delegate for the specified component. This method should undo the configuration performed in `installUI`, being careful to leave the `JComponent` instance in a clean state (no extraneous listeners, look-and-feel-specific property objects, etc.). This should include the following:
      1. Remove any UI-set borders from the component.
      2. Remove any UI-set layout managers on the component.
      3. Remove any UI-added sub-components from the component.
      4. Remove any UI-added event/property listeners from the component.
      5. Remove any UI-installed keyboard UI from the component.
      6. Nullify any allocated instance data objects to allow for GC.
      Overrides:
        `uninstallUI` in class `ComponentUI`
      Parameters:
        `c` - the component from which this UI delegate is being removed; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
      See Also:
        `ComponentUI.installUI(javax.swing.JComponent)`, `JComponent.updateUI()`

    - #### uninstallDefaults

          protected void uninstallDefaults()

    - #### uninstallComponents

          protected void uninstallComponents(JMenuItem menuItem)

      Since:
        1.3

    - #### uninstallListeners

          protected void uninstallListeners()

    - #### uninstallKeyboardActions

          protected void uninstallKeyboardActions()

    - #### createMouseInputListener

          protected MouseInputListener createMouseInputListener(JComponent c)

    - #### createMenuDragMouseListener

          protected MenuDragMouseListener createMenuDragMouseListener(JComponent c)

    - #### createMenuKeyListener

          protected MenuKeyListener createMenuKeyListener(JComponent c)

    - #### createPropertyChangeListener

          protected PropertyChangeListener createPropertyChangeListener(JComponent c)

      Creates a `PropertyChangeListener` which will be added to the menu item. If this method returns null then it will not be added to the menu item.
      Returns:
        an instance of a `PropertyChangeListener` or null
      Since:
        1.6

    - #### getMinimumSize

          public Dimension getMinimumSize(JComponent c)

      Description copied from class: `ComponentUI`
      Returns the specified component's minimum size appropriate for the look and feel. If `null` is returned, the minimum size will be calculated by the component's layout manager instead (this is the preferred approach for any component with a specific layout manager installed). The default implementation of this method invokes `getPreferredSize` and returns that value.
      Overrides:
        `getMinimumSize` in class `ComponentUI`
      Parameters:
        `c` - the component whose minimum size is being queried; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
      Returns:
        a `Dimension` object or `null`
      See Also:
        `JComponent.getMinimumSize()`, `LayoutManager.minimumLayoutSize(java.awt.Container)`, `ComponentUI.getPreferredSize(javax.swing.JComponent)`

    - #### getPreferredSize

          public Dimension getPreferredSize(JComponent c)

      Description copied from class: `ComponentUI`
      Returns the specified component's preferred size appropriate for the look and feel. If `null` is returned, the preferred size will be calculated by the component's layout manager instead (this is the preferred approach for any component with a specific layout manager installed). The default implementation of this method returns `null`.
      Overrides:
        `getPreferredSize` in class `ComponentUI`
      Parameters:
        `c` - the component whose preferred size is being queried; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
      See Also:
        `JComponent.getPreferredSize()`, `LayoutManager.preferredLayoutSize(java.awt.Container)`

    - #### getMaximumSize

          public Dimension getMaximumSize(JComponent c)

      Description copied from class: `ComponentUI`
      Returns the specified component's maximum size appropriate for the look and feel. If `null` is returned, the maximum size will be calculated by the component's layout manager instead (this is the preferred approach for any component with a specific layout manager installed). The default implementation of this method invokes `getPreferredSize` and returns that value.
      Overrides:
        `getMaximumSize` in class `ComponentUI`
      Parameters:
        `c` - the component whose maximum size is being queried; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
      Returns:
        a `Dimension` object or `null`
      See Also:
        `JComponent.getMaximumSize()`, `LayoutManager2.maximumLayoutSize(java.awt.Container)`

    - #### getPreferredMenuItemSize

          protected Dimension getPreferredMenuItemSize(JComponent c,
                                                       Icon checkIcon,
                                                       Icon arrowIcon,
                                                       int defaultTextIconGap)

    - #### update

          public void update(Graphics g,
                             JComponent c)

      We draw the background in paintMenuItem() so override update (which fills the background of opaque components by default) to just call paint().
      Overrides:
        `update` in class `ComponentUI`
      Parameters:
        `g` - the `Graphics` context in which to paint
        `c` - the component being painted; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
      See Also:
        `ComponentUI.paint(java.awt.Graphics, javax.swing.JComponent)`, `JComponent.paintComponent(java.awt.Graphics)`

    - #### paint

          public void paint(Graphics g,
                            JComponent c)

      Description copied from class: `ComponentUI`
      Paints the specified component appropriately for the look and feel. This method is invoked from the `ComponentUI.update` method when the specified component is being painted. Subclasses should override this method and use the specified `Graphics` object to render the content of the component.
      Overrides:
        `paint` in class `ComponentUI`
      Parameters:
        `g` - the `Graphics` context in which to paint
        `c` - the component being painted; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
      See Also:
        `ComponentUI.update(java.awt.Graphics, javax.swing.JComponent)`

    - #### paintMenuItem

          protected void paintMenuItem(Graphics g,
                                       JComponent c,
                                       Icon checkIcon,
                                       Icon arrowIcon,
                                       Color background,
                                       Color foreground,
                                       int defaultTextIconGap)

    - #### paintBackground

          protected void paintBackground(Graphics g,
                                         JMenuItem menuItem,
                                         Color bgColor)

      Draws the background of the menu item.
      Parameters:
        `g` - the paint graphics
        `menuItem` - menu item to be painted
        `bgColor` - selection background color
      Since:
        1.4

    - #### paintText

          protected void paintText(Graphics g,
                                   JMenuItem menuItem,
                                   Rectangle textRect,
                                   String text)

      Renders the text of the current menu item.

      Parameters:
        `g` - graphics context
        `menuItem` - menu item to render
        `textRect` - bounding rectangle for rendering the text
        `text` - string to render
      Since:
        1.4

    - #### getPath

          public MenuElement[] getPath()

    - #### doClick

          protected void doClick(MenuSelectionManager msm)

      Call this method when a menu item is to be activated. This method handles some of the details of menu item activation such as clearing the selected path and messaging the JMenuItem's doClick() method.
      Parameters:
        `msm` - A MenuSelectionManager. The visual feedback and internal bookkeeping tasks are delegated to this MenuSelectionManager. If `null` is passed as this argument, the `MenuSelectionManager.defaultManager` is used.
      Since:
        1.4
      See Also:
        `MenuSelectionManager`, `AbstractButton.doClick(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.