BasicMenuItemUI (Java Platform SE 8 ) (original) (raw)
- javax.swing.plaf.ComponentUI
- javax.swing.plaf.ButtonUI
- javax.swing.plaf.MenuItemUI
* * javax.swing.plaf.basic.BasicMenuItemUI
- javax.swing.plaf.MenuItemUI
- javax.swing.plaf.ButtonUI
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 fromcreatePropertyChangeListener. 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 duringinstallUI. 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](../../../../javax/swing/plaf/ComponentUI.html "class in javax.swing.plaf") `[contains](../../../../javax/swing/plaf/ComponentUI.html#contains-javax.swing.JComponent-int-int-), [getAccessibleChild](../../../../javax/swing/plaf/ComponentUI.html#getAccessibleChild-javax.swing.JComponent-int-), [getAccessibleChildrenCount](../../../../javax/swing/plaf/ComponentUI.html#getAccessibleChildrenCount-javax.swing.JComponent-), [getBaseline](../../../../javax/swing/plaf/ComponentUI.html#getBaseline-javax.swing.JComponent-int-int-), [getBaselineResizeBehavior](../../../../javax/swing/plaf/ComponentUI.html#getBaselineResizeBehavior-javax.swing.JComponent-)` * ### Methods inherited from class java.lang.[Object](../../../../java/lang/Object.html "class in java.lang") `[clone](../../../../java/lang/Object.html#clone--), [equals](../../../../java/lang/Object.html#equals-java.lang.Object-), [finalize](../../../../java/lang/Object.html#finalize--), [getClass](../../../../java/lang/Object.html#getClass--), [hashCode](../../../../java/lang/Object.html#hashCode--), [notify](../../../../java/lang/Object.html#notify--), [notifyAll](../../../../java/lang/Object.html#notifyAll--), [toString](../../../../java/lang/Object.html#toString--), [wait](../../../../java/lang/Object.html#wait--), [wait](../../../../java/lang/Object.html#wait-long-), [wait](../../../../java/lang/Object.html#wait-long-int-)`
Field Detail
* #### menuItem protected [JMenuItem](../../../../javax/swing/JMenuItem.html "class in javax.swing") menuItem * #### selectionBackground protected [Color](../../../../java/awt/Color.html "class in java.awt") selectionBackground * #### selectionForeground protected [Color](../../../../java/awt/Color.html "class in java.awt") selectionForeground * #### disabledForeground protected [Color](../../../../java/awt/Color.html "class in java.awt") disabledForeground * #### acceleratorForeground protected [Color](../../../../java/awt/Color.html "class in java.awt") acceleratorForeground * #### acceleratorSelectionForeground protected [Color](../../../../java/awt/Color.html "class in java.awt") acceleratorSelectionForeground * #### acceleratorDelimiter protected [String](../../../../java/lang/String.html "class in java.lang") acceleratorDelimiter Accelerator delimiter string, such as `'+'` in `'Ctrl+C'`. Since: 1.7 * #### defaultTextIconGap protected int defaultTextIconGap * #### acceleratorFont protected [Font](../../../../java/awt/Font.html "class in java.awt") acceleratorFont * #### mouseInputListener protected [MouseInputListener](../../../../javax/swing/event/MouseInputListener.html "interface in javax.swing.event") mouseInputListener * #### menuDragMouseListener protected [MenuDragMouseListener](../../../../javax/swing/event/MenuDragMouseListener.html "interface in javax.swing.event") menuDragMouseListener * #### menuKeyListener protected [MenuKeyListener](../../../../javax/swing/event/MenuKeyListener.html "interface in javax.swing.event") menuKeyListener * #### propertyChangeListener protected [PropertyChangeListener](../../../../java/beans/PropertyChangeListener.html "interface in java.beans") 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)](../../../../javax/swing/plaf/basic/BasicMenuItemUI.html#createPropertyChangeListener-javax.swing.JComponent-) * #### arrowIcon protected [Icon](../../../../javax/swing/Icon.html "interface in javax.swing") arrowIcon * #### checkIcon protected [Icon](../../../../javax/swing/Icon.html "interface in javax.swing") checkIcon * #### oldBorderPainted protected boolean oldBorderPainted
Constructor Detail
* #### BasicMenuItemUI public BasicMenuItemUI()
Method Detail
* #### createUI public static [ComponentUI](../../../../javax/swing/plaf/ComponentUI.html "class in javax.swing.plaf") createUI([JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") c) * #### installUI public void installUI([JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") c) 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](../../../../javax/swing/plaf/ComponentUI.html#installUI-javax.swing.JComponent-)` in class `[ComponentUI](../../../../javax/swing/plaf/ComponentUI.html "class in javax.swing.plaf")` Parameters: `c` \- the component where this UI delegate is being installed See Also: [ComponentUI.uninstallUI(javax.swing.JComponent)](../../../../javax/swing/plaf/ComponentUI.html#uninstallUI-javax.swing.JComponent-), [JComponent.setUI(javax.swing.plaf.ComponentUI)](../../../../javax/swing/JComponent.html#setUI-javax.swing.plaf.ComponentUI-), [JComponent.updateUI()](../../../../javax/swing/JComponent.html#updateUI--) * #### installDefaults protected void installDefaults() * #### installComponents protected void installComponents([JMenuItem](../../../../javax/swing/JMenuItem.html "class in javax.swing") menuItem) Since: 1.3 * #### getPropertyPrefix protected [String](../../../../java/lang/String.html "class in java.lang") getPropertyPrefix() * #### installListeners protected void installListeners() * #### installKeyboardActions protected void installKeyboardActions() * #### uninstallUI public void uninstallUI([JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") c) 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](../../../../javax/swing/plaf/ComponentUI.html#uninstallUI-javax.swing.JComponent-)` in class `[ComponentUI](../../../../javax/swing/plaf/ComponentUI.html "class in javax.swing.plaf")` 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)](../../../../javax/swing/plaf/ComponentUI.html#installUI-javax.swing.JComponent-), [JComponent.updateUI()](../../../../javax/swing/JComponent.html#updateUI--) * #### uninstallDefaults protected void uninstallDefaults() * #### uninstallComponents protected void uninstallComponents([JMenuItem](../../../../javax/swing/JMenuItem.html "class in javax.swing") menuItem) Since: 1.3 * #### uninstallListeners protected void uninstallListeners() * #### uninstallKeyboardActions protected void uninstallKeyboardActions() * #### createMouseInputListener protected [MouseInputListener](../../../../javax/swing/event/MouseInputListener.html "interface in javax.swing.event") createMouseInputListener([JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") c) * #### createMenuDragMouseListener protected [MenuDragMouseListener](../../../../javax/swing/event/MenuDragMouseListener.html "interface in javax.swing.event") createMenuDragMouseListener([JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") c) * #### createMenuKeyListener protected [MenuKeyListener](../../../../javax/swing/event/MenuKeyListener.html "interface in javax.swing.event") createMenuKeyListener([JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") c) * #### createPropertyChangeListener protected [PropertyChangeListener](../../../../java/beans/PropertyChangeListener.html "interface in java.beans") createPropertyChangeListener([JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") 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](../../../../java/awt/Dimension.html "class in java.awt") getMinimumSize([JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") c) 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](../../../../javax/swing/plaf/ComponentUI.html#getMinimumSize-javax.swing.JComponent-)` in class `[ComponentUI](../../../../javax/swing/plaf/ComponentUI.html "class in javax.swing.plaf")` 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()](../../../../javax/swing/JComponent.html#getMinimumSize--), [LayoutManager.minimumLayoutSize(java.awt.Container)](../../../../java/awt/LayoutManager.html#minimumLayoutSize-java.awt.Container-), [ComponentUI.getPreferredSize(javax.swing.JComponent)](../../../../javax/swing/plaf/ComponentUI.html#getPreferredSize-javax.swing.JComponent-) * #### getPreferredSize public [Dimension](../../../../java/awt/Dimension.html "class in java.awt") getPreferredSize([JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") c) 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](../../../../javax/swing/plaf/ComponentUI.html#getPreferredSize-javax.swing.JComponent-)` in class `[ComponentUI](../../../../javax/swing/plaf/ComponentUI.html "class in javax.swing.plaf")` 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()](../../../../javax/swing/JComponent.html#getPreferredSize--), [LayoutManager.preferredLayoutSize(java.awt.Container)](../../../../java/awt/LayoutManager.html#preferredLayoutSize-java.awt.Container-) * #### getMaximumSize public [Dimension](../../../../java/awt/Dimension.html "class in java.awt") getMaximumSize([JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") c) 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](../../../../javax/swing/plaf/ComponentUI.html#getMaximumSize-javax.swing.JComponent-)` in class `[ComponentUI](../../../../javax/swing/plaf/ComponentUI.html "class in javax.swing.plaf")` 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()](../../../../javax/swing/JComponent.html#getMaximumSize--), [LayoutManager2.maximumLayoutSize(java.awt.Container)](../../../../java/awt/LayoutManager2.html#maximumLayoutSize-java.awt.Container-) * #### getPreferredMenuItemSize protected [Dimension](../../../../java/awt/Dimension.html "class in java.awt") getPreferredMenuItemSize([JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") c, [Icon](../../../../javax/swing/Icon.html "interface in javax.swing") checkIcon, [Icon](../../../../javax/swing/Icon.html "interface in javax.swing") arrowIcon, int defaultTextIconGap) * #### update public void update([Graphics](../../../../java/awt/Graphics.html "class in java.awt") g, [JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") 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](../../../../javax/swing/plaf/ComponentUI.html#update-java.awt.Graphics-javax.swing.JComponent-)` in class `[ComponentUI](../../../../javax/swing/plaf/ComponentUI.html "class in javax.swing.plaf")` 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)](../../../../javax/swing/plaf/ComponentUI.html#paint-java.awt.Graphics-javax.swing.JComponent-), [JComponent.paintComponent(java.awt.Graphics)](../../../../javax/swing/JComponent.html#paintComponent-java.awt.Graphics-) * #### paint public void paint([Graphics](../../../../java/awt/Graphics.html "class in java.awt") g, [JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") c) 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](../../../../javax/swing/plaf/ComponentUI.html#paint-java.awt.Graphics-javax.swing.JComponent-)` in class `[ComponentUI](../../../../javax/swing/plaf/ComponentUI.html "class in javax.swing.plaf")` 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)](../../../../javax/swing/plaf/ComponentUI.html#update-java.awt.Graphics-javax.swing.JComponent-) * #### paintMenuItem protected void paintMenuItem([Graphics](../../../../java/awt/Graphics.html "class in java.awt") g, [JComponent](../../../../javax/swing/JComponent.html "class in javax.swing") c, [Icon](../../../../javax/swing/Icon.html "interface in javax.swing") checkIcon, [Icon](../../../../javax/swing/Icon.html "interface in javax.swing") arrowIcon, [Color](../../../../java/awt/Color.html "class in java.awt") background, [Color](../../../../java/awt/Color.html "class in java.awt") foreground, int defaultTextIconGap) * #### paintBackground protected void paintBackground([Graphics](../../../../java/awt/Graphics.html "class in java.awt") g, [JMenuItem](../../../../javax/swing/JMenuItem.html "class in javax.swing") menuItem, [Color](../../../../java/awt/Color.html "class in java.awt") 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](../../../../java/awt/Graphics.html "class in java.awt") g, [JMenuItem](../../../../javax/swing/JMenuItem.html "class in javax.swing") menuItem, [Rectangle](../../../../java/awt/Rectangle.html "class in java.awt") textRect, [String](../../../../java/lang/String.html "class in java.lang") 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](../../../../javax/swing/MenuElement.html "interface in javax.swing")[] getPath() * #### doClick protected void doClick([MenuSelectionManager](../../../../javax/swing/MenuSelectionManager.html "class in javax.swing") 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](../../../../javax/swing/MenuSelectionManager.html "class in javax.swing"), [AbstractButton.doClick(int)](../../../../javax/swing/AbstractButton.html#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, 2025, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.