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

    public class BasicMenuItemUI
    extends MenuItemUI

BasicMenuItem implementation

### Nested Class Summary

Nested Classes
`protected class` `BasicMenuItemUI.MouseInputHandler`

### Field Summary

Fields
`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 and Description
`BasicMenuItemUI()`

### Method Summary

Methods
`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 appropriate for the look and feel.
`void` `paint(Graphics g, JComponent c)` Paints the specified component appropriate 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

#### 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 appropriate 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 any 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 appropriate 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)`

Copyright © 1993, 2017, Oracle and/or its affiliates. All rights reserved.