Module  java.desktop
软件包  javax.swing

Class JMenu

  • All Implemented Interfaces:
    ImageObserverItemSelectableMenuContainerSerializableAccessibleMenuElementSwingConstants


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

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

    菜单可以配置,并在一定程度上控制,由Action s。 使用带有菜单的Action除了直接配置菜单之外,还有很多好处。 有关更多详细信息,请参阅Swing Components Supporting Action ,您可以在“Java教程”一节中 How to Use Actions中找到更多信息。

    有关使用菜单的信息和示例,请参阅“Java教程”中的 How to Use Menus ”一节

    警告: Swing不是线程安全的。 有关更多信息,请参阅Swing's Threading Policy

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

    从以下版本开始:
    1.2
    另请参见:
    JMenuItemJSeparatorJMenuBarJPopupMenuSerialized Form
    • 构造方法详细信息

      • JMenu

        public JMenu​()
        构造一个新的 JMenu ,没有文字。
      • JMenu

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

        public JMenu​(Action a)
        构造菜单,其属性取自提供的 Action
        参数
        a - a Action
        从以下版本开始:
        1.3
      • JMenu

        public JMenu​(String s,
                     boolean b)
        构造一个新的 JMenu ,其中提供的字符串作为其文本并指定为撕下菜单。
        参数
        s - 菜单标签的文本
        b - 菜单可以被拆除(尚未实现)
    • 方法详细信息

      • isSelected

        public boolean isSelected​()
        如果当前选择菜单(高亮显示),则返回true。
        重写:
        isSelected中的 AbstractButton
        结果
        如果选择菜单,则为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.submenuPopupOffsetX ,并Menu.submenuPopupOffsetY调整弹出的确切位置。
        结果
        一个 Point在菜单的坐标空间中,应该用作 JMenu的弹出菜单的原点
        从以下版本开始:
        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 JMenuItem add​(String s)
        创建一个带有指定文本的新菜单项,并将其附加到此菜单的末尾。
        参数
        s - 要添加的菜单项的字符串
        结果
        新的 JMenuItem
      • add

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

        protected JMenuItem createActionComponent​(Action a)
        Action创建 JMenuItem工厂方法添加到 JMenu
        参数
        a - 要添加的菜单项的 Action
        结果
        新的菜单项
        从以下版本开始:
        1.3
        另请参见:
        Action
      • createActionChangeListener

        protected PropertyChangeListener createActionChangeListener​(JMenuItem b)
        返回正确配置的 PropertyChangeListener ,更新控件,因为发生 Action更改。
        参数
        b - 要创建 PropertyChangeListener的菜单项
        结果
        一个 PropertyChangeListenerb
      • 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兼容性包含此方法。
        结果
        整数等于菜单上的项目数
        另请参见:
        getMenuComponentCount()
      • isTearOff

        @BeanProperty(bound=false)
        public boolean isTearOff​()
        如果菜单被拆除,则返回true。 此方法尚未实现。
        结果
        如果菜单可以被撕下,否则为false
        异常
        Error - 如果被调用 - 此方法尚未实现
      • remove

        public void remove​(JMenuItem item)
        从此菜单中删除指定的菜单项。 如果没有弹出菜单,此方法将无效。
        参数
        item - 要从菜单中删除的 JMenuItem
      • 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
        结果
        如果存在 ComponentComponent 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​()
        返回使用addMenuListener()添加到该JMenu的所有 MenuListener的数组。
        结果
        所有添加的 MenuListener或一个空数组,如果没有添加任何监听器
        从以下版本开始:
        1.4
      • fireMenuSelected

        protected void fireMenuSelected​()
        通知所有在此事件类型上通知有兴趣的听众。 事件实例是懒惰地创建的。
        异常
        Error - 如果有一个 null听众
        另请参见:
        EventListenerList
      • fireMenuDeselected

        protected void fireMenuDeselected​()
        通知所有在此事件类型上通知有兴趣的听众。 事件实例是懒惰地创建的。
        异常
        Error - 如果有一个 null听众
        另请参见:
        EventListenerList
      • fireMenuCanceled

        protected void fireMenuCanceled​()
        通知所有在此事件类型上通知有兴趣的听众。 事件实例是懒惰地创建的。
        异常
        Error - 如果有一个 null监听器
        另请参见:
        EventListenerList
      • createWinListener

        protected JMenu.WinListener createWinListener​(JPopupMenu p)
        为弹出窗口创建一个关闭窗口的侦听器。
        参数
        p - JPopupMenu
        结果
        新的窗口关闭侦听器
        另请参见:
        JMenu.WinListener
      • getSubElements

        @BeanProperty(bound=false)
        public MenuElement[] getSubElements​()
        返回包含此菜单组件子菜单的MenuElement的数组。 如果弹出菜单是null返回一个空数组。 这种方法是符合MenuElement接口所MenuElement 请注意,由于JSeparator s不符合MenuElement接口,此数组将只包含JMenuItem s。
        Specified by:
        getSubElements在接口 MenuElement
        重写:
        getSubElementsJMenuItem
        结果
        一个 MenuElement对象的数组
      • getComponent

        public Component getComponent​()
        返回java.awt.Component用于绘制这个MenuElement 返回的组件用于转换事件并检测事件是否在菜单组件内。
        Specified by:
        getComponent在接口 MenuElement
        重写:
        getComponent JMenuItem
        结果
        绘制此菜单项的 Component
      • setComponentOrientation

        public void setComponentOrientation​(ComponentOrientation o)
        描述从类复制: Component
        设置用于对该组件中的元素或文本进行排序的语言敏感方向。 语言敏感的LayoutManagerComponent子类将使用此属性来确定如何布局和绘制组件。

        在施工时,组件的方向设置为ComponentOrientation.UNKNOWN ,表示尚未明确指定。 UNKNOWN方向的行为与ComponentOrientation.LEFT_TO_RIGHT相同。

        要设置单个组件的方向,请使用此方法。 要设置整个组件层次结构的方向,请使用applyComponentOrientation

        该方法更改布局相关信息,因此使组件层次结构无效。

        重写:
        setComponentOrientation Component
        参数
        o - 要设置的方向
        另请参见:
        ComponentOrientationComponent.invalidate()
      • setAccelerator

        public void setAccelerator​(KeyStroke keyStroke)
        setAccelerator没有为JMenu定义。 改用setMnemonic
        重写:
        setAcceleratorJMenuItem
        参数
        keyStroke - 在不导航菜单层次结构的情况下将调用 JMenuItemkeyStroke的击键组合
        异常
        Error - 如果调用 - 此方法未为JMenu定义。 改用setMnemonic
      • doClick

        public void doClick​(int pressTime)
        以编程方式执行“点击”。 这将覆盖方法AbstractButton.doClick以使菜单弹出。
        重写:
        doClickAbstractButton
        参数
        pressTime - 表示按下按钮的毫秒数
      • paramString

        protected String paramString​()
        返回此JMenu的字符串表示JMenu 该方法仅用于调试目的,并且返回的字符串的内容和格式可能因实现而异。 返回的字符串可能为空,但可能不是null
        重写:
        paramStringJMenuItem
        结果
        这个JMenu的字符串表示形式。