Module java.desktop
Package javax.swing

Class JMenu

所有已实现的接口:
ImageObserver, ItemSelectable, MenuContainer, Serializable, Accessible, MenuElement, SwingConstants

@JavaBean(description="A popup window containing menu items displayed in a menu bar.") public class JMenu extends JMenuItem implements Accessible, MenuElement
菜单的实现--一个弹出窗口,包含JMenuItem,当用户在JMenuBar上选择项目时显示。除了JMenuItem外,JMenu还可以包含JSeparator

本质上,菜单是一个带有关联JPopupMenu的按钮。当按下“按钮”时,JPopupMenu会出现。如果“按钮”在JMenuBar上,菜单是一个顶层窗口。如果“按钮”是另一个菜单项,则JPopupMenu是“向右拉出”菜单。

菜单可以通过Action进行配置和控制。使用Action与菜单有许多好处,超出直接配置菜单。有关更多详细信息,请参阅支持Action的Swing组件,您可以在如何使用Actions中找到更多信息,这是The Java Tutorial中的一节。

有关使用菜单的信息和示例,请参阅The Java Tutorial中的如何使用菜单部分。

警告: Swing不是线程安全的。有关更多信息,请参阅Swing的线程策略

警告: 该类的序列化对象将不兼容未来的Swing版本。当前的序列化支持适用于短期存储或在运行相同Swing版本的应用程序之间进行RMI。从1.4开始,已将所有JavaBeans的长期存储支持添加到java.beans包中。请参阅XMLEncoder

自1.2版本起:
  • Field Details

  • Constructor Details

    • JMenu

      public JMenu()
      构造一个没有文本的新JMenu
    • JMenu

      public JMenu(String s)
      用提供的字符串作为其文本构造一个新的JMenu
      参数:
      s - 菜单标签的文本
    • JMenu

      public JMenu(Action a)
      构造一个从提供的Action获取属性的菜单。
      参数:
      a - 一个Action
      自1.3版本起:
    • JMenu

      public JMenu(String s, boolean b)
      用提供的字符串作为其文本构造一个新的JMenu,并指定为可拆分菜单或非拆分菜单。
      参数:
      s - 菜单标签的文本
      b - 菜单是否可拆分(尚未实现)
  • Method Details

    • updateUI

      public void updateUI()
      重置当前外观和感觉的UI属性。
      覆盖:
      updateUI 在类 JMenuItem
      参见:
    • getUIClassID

      @BeanProperty(bound=false) public String getUIClassID()
      返回呈现此组件的L&F类的名称。
      覆盖:
      getUIClassID 在类 JMenuItem
      返回:
      字符串“MenuUI”
      参见:
    • setModel

      public void setModel(ButtonModel newModel)
      设置“菜单按钮”的数据模型--用户单击以打开或关闭菜单的标签。
      覆盖:
      setModel 在类 AbstractButton
      参数:
      newModel - ButtonModel
      参见:
    • isSelected

      public boolean isSelected()
      如果菜单当前被选中(高亮),则返回true。
      覆盖:
      isSelected 在类 AbstractButton
      返回:
      如果菜单被选中,则返回true,否则返回false
    • setSelected

      @BeanProperty(expert=true, hidden=true, description="When the menu is selected, its popup child is shown.") public void setSelected(boolean b)
      设置菜单的选择状态。
      覆盖:
      setSelected 在类 AbstractButton
      参数:
      b - true表示选择(高亮)菜单;false表示取消选择菜单
    • isPopupMenuVisible

      public boolean isPopupMenuVisible()
      如果菜单的弹出窗口当前可见,则返回true。
      返回:
      如果菜单可见,则返回true,否则返回false
    • setPopupMenuVisible

      @BeanProperty(bound=false, expert=true, hidden=true, description="The popup menu\'s visibility") public void setPopupMenuVisible(boolean b)
      设置菜单的弹出窗口的可见性。如果菜单未启用,则此方法不会产生任何效果。
      参数:
      b - 一个布尔值 -- true表示使菜单可见,false表示隐藏菜单
    • getPopupMenuOrigin

      protected Point getPopupMenuOrigin()
      计算JMenu的弹出菜单的起点。此方法使用名为Menu.menuPopupOffsetXMenu.menuPopupOffsetYMenu.submenuPopupOffsetXMenu.submenuPopupOffsetY的外观属性来调整弹出菜单的确切位置。
      返回:
      应在JMenu的坐标空间中用作JMenu的弹出菜单起点的Point
      自:
      1.3
    • getDelay

      public int getDelay()
      返回建议的延迟时间(以毫秒为单位),用于弹出或关闭子菜单。每个外观和感觉(L&F)可能会确定其自己的策略来观察delay属性。在大多数情况下,顶级菜单或拖动时不会观察延迟。默认的delay为0。此方法是外观代码的属性,用于管理各种UI实现的特殊性。
      返回:
      delay属性
    • setDelay

      @BeanProperty(bound=false, expert=true, description="The delay between menu selection and making the popup menu visible") public void setDelay(int d)
      设置菜单的PopupMenu弹出或关闭前的建议延迟。每个外观和感觉(L&F)可能会确定其自己的策略来观察延迟属性。在大多数情况下,顶级菜单或拖动时不会观察延迟。此方法是外观代码的属性,用于管理各种UI实现的特殊性。
      参数:
      d - 延迟的毫秒数
      抛出:
      IllegalArgumentException - 如果d小于0
    • setMenuLocation

      public void setMenuLocation(int x, int y)
      设置弹出组件的位置。
      参数:
      x - 弹出位置的x坐标
      y - 弹出位置的y坐标
    • add

      public JMenuItem add(JMenuItem menuItem)
      将菜单项附加到此菜单的末尾。返回添加的菜单项。
      参数:
      menuItem - 要添加的JMenuitem
      返回:
      添加的JMenuItem
    • add

      public Component add(Component c)
      将组件附加到此菜单的末尾。返回添加的组件。
      覆盖:
      add 在类 Container
      参数:
      c - 要添加的Component
      返回:
      添加的Component
      参见:
    • add

      public Component add(Component c, int index)
      将指定的组件添加到此容器的给定位置。如果index等于-1,则该组件将附加到末尾。
      覆盖:
      add 在类 Container
      参数:
      c - 要添加的Component
      index - 要插入组件的位置
      返回:
      添加的Component
      参见:
    • add

      public JMenuItem add(String s)
      创建具有指定文本的新菜单项,并将其附加到此菜单的末尾。
      参数:
      s - 要添加的菜单项的文本
      返回:
      新的JMenuItem
    • add

      public JMenuItem add(Action a)
      创建附加到指定Action对象的新菜单项,并将其附加到此菜单的末尾。
      参数:
      a - 要添加的菜单项的Action
      返回:
      新的JMenuItem
      参见:
    • createActionComponent

      protected JMenuItem createActionComponent(Action a)
      工厂方法,为添加到JMenuAction创建JMenuItem
      参数:
      a - 要添加的菜单项的Action
      返回:
      新的菜单项
      自:
      1.3
      参见:
    • createActionChangeListener

      protected PropertyChangeListener createActionChangeListener(JMenuItem b)
      返回一个经过适当配置的PropertyChangeListener,当Action发生更改时更新控件。
      参数:
      b - 要为其创建PropertyChangeListener的菜单项
      返回:
      用于bPropertyChangeListener
    • addSeparator

      public void addSeparator()
      在菜单的末尾添加一个新的分隔符。
    • insert

      public void insert(String s, int pos)
      在给定位置插入具有指定文本的新菜单项。
      参数:
      s - 要添加的菜单项的文本
      pos - 指定要添加新菜单项的位置的整数
      抛出:
      IllegalArgumentException - 当pos的值小于0时
    • insert

      public JMenuItem insert(JMenuItem mi, int pos)
      在给定位置插入指定的JMenuitem
      参数:
      mi - 要添加的JMenuitem
      pos - 指定要添加新JMenuitem的位置的整数
      返回:
      新的菜单项
      抛出:
      IllegalArgumentException - 如果pos的值小于0
    • insert

      public JMenuItem insert(Action a, int pos)
      在给定位置插入附加到指定Action对象的新菜单项。
      参数:
      a - 要添加的菜单项的Action对象
      pos - 指定要添加新菜单项的位置的整数
      返回:
      新的菜单项
      抛出:
      IllegalArgumentException - 如果pos的值小于0
    • insertSeparator

      public void insertSeparator(int index)
      在指定位置插入一个分隔符。
      参数:
      index - 指定要插入菜单分隔符的位置的整数
      抛出:
      IllegalArgumentException - 如果index的值小于0
    • getItem

      public JMenuItem getItem(int pos)
      返回指定位置的JMenuItem。如果pos处的组件不是菜单项,则返回null。此方法包含为了AWT兼容性而包含的。
      参数:
      pos - 指定位置的整数
      返回:
      指定位置的菜单项;如果指定位置的项目不是菜单项,则返回null
      抛出:
      IllegalArgumentException - 如果pos的值小于0
    • getItemCount

      @BeanProperty(bound=false) public int getItemCount()
      返回菜单上的项目数,包括分隔符。此方法包含为了AWT兼容性而包含的。
      返回:
      等于菜单上项目数的整数
      参见:
    • isTearOff

      @BeanProperty(bound=false) public boolean isTearOff()
      如果菜单可以被拆分,则返回true。此方法尚未实现。
      返回值:
      如果菜单可以被拆分,则为true,否则为false
      抛出:
      Error - 如果调用 -- 此方法尚未实现
    • remove

      public void remove(JMenuItem item)
      从此菜单中移除指定的菜单项。如果没有弹出菜单,则此方法不会产生任何效果。
      参数:
      item - 要从菜单中移除的JMenuItem
    • remove

      public void remove(int pos)
      从此菜单中移除指定索引处的菜单项。
      覆盖:
      remove 在类 Container
      参数:
      pos - 要移除的项目的位置
      抛出:
      IllegalArgumentException - 如果pos的值小于0,或者如果pos大于菜单项的数量
      参见:
    • remove

      public void remove(Component c)
      从此菜单中移除组件c
      覆盖:
      remove 在类 Container
      参数:
      c - 要移除的组件
      参见:
    • removeAll

      public void removeAll()
      从此菜单中移除所有菜单项。
      覆盖:
      removeAll 在类 Container
      参见:
    • getMenuComponentCount

      @BeanProperty(bound=false) public int getMenuComponentCount()
      返回菜单上组件的数量。
      返回值:
      包含菜单上组件数量的整数
    • getMenuComponent

      public Component getMenuComponent(int n)
      返回位置为n的组件。
      参数:
      n - 要返回的组件的位置
      返回值:
      请求的组件,如果没有弹出菜单则返回null
    • getMenuComponents

      @BeanProperty(bound=false) public Component[] getMenuComponents()
      返回菜单子组件的Component数组。请注意,这将返回弹出菜单中的所有Component,包括分隔符。
      返回值:
      一个Component数组,如果没有弹出菜单则返回空数组
    • isTopLevelMenu

      @BeanProperty(bound=false) public boolean isTopLevelMenu()
      如果菜单是“顶级菜单”,即它是菜单栏的直接子菜单,则返回true。
      返回值:
      如果菜单是从菜单栏激活的,则为true;如果菜单是从另一个菜单上的菜单项激活的,则为false
    • isMenuComponent

      public boolean isMenuComponent(Component c)
      如果指定的组件存在于子菜单层次结构中,则返回true。
      参数:
      c - 要测试的Component
      返回值:
      如果Component存在,则为true,否则为false
    • getPopupMenu

      @BeanProperty(bound=false) public JPopupMenu getPopupMenu()
      返回与此菜单关联的弹出菜单。如果没有弹出菜单,则将创建一个。
      返回值:
      与此菜单关联的JPopupMenu
    • addMenuListener

      public void addMenuListener(MenuListener l)
      为菜单事件添加监听器。
      参数:
      l - 要添加的监听器
    • removeMenuListener

      public void removeMenuListener(MenuListener l)
      移除菜单事件的监听器。
      参数:
      l - 要移除的监听器
    • getMenuListeners

      @BeanProperty(bound=false) public MenuListener[] getMenuListeners()
      返回添加到此JMenu中的所有MenuListener的数组。
      返回值:
      所有已添加的MenuListener数组,如果没有添加监听器则返回空数组
      自1.4起:
      1.4
    • fireMenuSelected

      protected void fireMenuSelected()
      通知所有已注册对此事件类型感兴趣的监听器。事件实例是延迟创建的。
      抛出:
      Error - 如果存在null监听器
      参见:
    • fireMenuDeselected

      protected void fireMenuDeselected()
      通知所有已注册对此事件类型感兴趣的监听器。事件实例是延迟创建的。
      抛出:
      Error - 如果存在null监听器
      参见:
    • fireMenuCanceled

      protected void fireMenuCanceled()
      通知所有已注册对此事件类型感兴趣的监听器。事件实例是延迟创建的。
      抛出:
      Error - 如果存在null监听器
      参见:
    • createWinListener

      protected JMenu.WinListener createWinListener(JPopupMenu p)
      为弹出菜单创建一个窗口关闭监听器。
      参数:
      p - JPopupMenu
      返回值:
      新的窗口关闭监听器
      参见:
    • getSubElements

      @BeanProperty(bound=false) public MenuElement[] getSubElements()
      返回包含此菜单组件子菜单的MenuElement数组。如果弹出菜单为null,则返回一个空数组。此方法需要符合MenuElement接口。请注意,由于JSeparator不符合MenuElement接口,因此此数组将只包含JMenuItem
      指定者:
      getSubElements 在接口 MenuElement
      覆盖:
      getSubElements 在类 JMenuItem
      返回值:
      一个MenuElement对象数组
    • getComponent

      public Component getComponent()
      返回用于绘制此MenuElementjava.awt.Component。返回的组件用于转换事件并检测事件是否在菜单组件内部。
      指定者:
      getComponent 在接口 MenuElement
      覆盖:
      getComponent 在类 JMenuItem
      返回值:
      绘制此菜单项的Component
    • applyComponentOrientation

      public void applyComponentOrientation(ComponentOrientation o)
      设置此菜单及其中包含的所有组件的ComponentOrientation属性。这包括getMenuComponents返回的所有组件。
      覆盖:
      applyComponentOrientation 在类 Container
      参数:
      o - 此菜单及其中包含的组件的新组件方向。
      抛出:
      NullPointerException - 如果orientation为null。
      自:
      1.4
      参见:
    • setComponentOrientation

      public void setComponentOrientation(ComponentOrientation o)
      设置此菜单及其关联弹出菜单的方向,由ComponentOrientation参数确定。
      覆盖:
      setComponentOrientation 在类 Component
      参数:
      o - 此菜单及其关联弹出菜单的新方向。
      参见:
    • setAccelerator

      public void setAccelerator(KeyStroke keyStroke)
      setAccelerator未为JMenu定义。请改用setMnemonic
      覆盖:
      setAccelerator 在类 JMenuItem
      参数:
      keyStroke - 将调用JMenuItem的动作监听器而不导航菜单层次结构的按键组合
      抛出:
      Error - 如果调用--此方法未为JMenu定义。请改用setMnemonic
    • processKeyEvent

      protected void processKeyEvent(KeyEvent evt)
      处理诸如助记键和加速键等键事件。
      覆盖:
      processKeyEvent 在类 JComponent
      参数:
      evt - 要处理的键事件
      参见:
    • doClick

      public void doClick(int pressTime)
      以编程方式执行“点击”。这覆盖了方法AbstractButton.doClick,以使菜单弹出。
      覆盖:
      doClick 在类 AbstractButton
      参数:
      pressTime - 按钮按下的毫秒数
    • paramString

      protected String paramString()
      返回此JMenu的字符串表示形式。此方法仅用于调试目的,返回的字符串的内容和格式可能因实现而异。返回的字符串可能为空,但不能为null
      覆盖:
      paramString 在类 JMenuItem
      返回:
      此JMenu的字符串表示形式。
    • getAccessibleContext

      @BeanProperty(bound=false) public AccessibleContext getAccessibleContext()
      获取与此JMenu关联的AccessibleContext。对于JMenus,AccessibleContext采用AccessibleJMenu的形式。如有必要,将创建一个新的AccessibleJMenu实例。
      指定者:
      getAccessibleContext 在接口 Accessible
      覆盖:
      getAccessibleContext 在类 JMenuItem
      返回:
      作为此JMenu的AccessibleContext的AccessibleJMenu