Module  java.desktop
软件包  javax.swing

Class JPopupMenu

  • All Implemented Interfaces:
    ImageObserverMenuContainerSerializableAccessibleMenuElement
    已知直接子类:
    BasicComboPopup


    @JavaBean(defaultProperty="UI",
              description="A small window that pops up and displays a series of choices.")
    public class JPopupMenu
    extends JComponent
    implements Accessible, MenuElement
    弹出菜单的一个实现 - 弹出一个小窗口并显示一系列选择。 A JPopupMenu用于当用户选择菜单栏上的项目时出现的菜单。 它也用于当选择激活它的菜单项时出现的“拉右”菜单。 最后,一个JPopupMenu也可以在任何你想要菜单出现的地方使用。 例如,当用户在指定区域中右键单击时。

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

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

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

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

      • JPopupMenu

        public JPopupMenu​()
        构造一个没有“调用者”的 JPopupMenu
      • JPopupMenu

        public JPopupMenu​(String label)
        构造具有指定标题的 JPopupMenu
        参数
        label - UI可能用于显示为弹出菜单的标题的字符串。
    • 方法详细信息

      • getDefaultLightWeightPopupEnabled

        public static boolean getDefaultLightWeightPopupEnabled​()
        获取 defaultLightWeightPopupEnabled属性,默认为 true
        结果
        的价值 defaultLightWeightPopupEnabled属性
        另请参见:
        setDefaultLightWeightPopupEnabled(boolean)
      • getUI

        public PopupMenuUI getUI​()
        返回渲染此组件的外观和感觉(L&F)对象。
        重写:
        getUIJComponent
        结果
        呈现此组件的 PopupMenuUI对象
      • processFocusEvent

        protected void processFocusEvent​(FocusEvent evt)
        描述从类复制: Component
        通过将这些事件发送到任何已注册的FocusListener对象来处理发生在该组件上的焦点事件。

        除非为此组件启用聚焦事件,否则不会调用此方法。 当以下情况发生时,聚焦事件将被启用:

        • A FocusListener对象通过addFocusListener注册。
        • 焦点事件通过enableEvents启用。

        如果对Component启用了焦点事件,则当前的KeyboardFocusManager确定是否应将焦点事件分派到已注册的对象FocusListener 如果要发送事件, KeyboardFocusManager调用ComponentdispatchEvent方法,这将调用ComponentprocessFocusEvent方法。

        如果Component启用了焦点事件,则使用FocusEvent作为参数调用ComponentdispatchEvent方法将导致调用ComponentprocessFocusEvent方法,无论当前的KeyboardFocusManager

        请注意,如果事件参数为null该行为未指定,并可能导致异常。

        重写:
        processFocusEventComponent
        参数
        evt - 焦点事件
        另请参见:
        FocusEventFocusListenerKeyboardFocusManagerComponent.addFocusListener(java.awt.event.FocusListener)Component.enableEvents(long)Component.dispatchEvent(java.awt.AWTEvent)
      • add

        public JMenuItem add​(JMenuItem menuItem)
        将指定的菜单项追加到此菜单的末尾。
        参数
        menuItem - 要添加的 JMenuItem
        结果
        JMenuItem加了
      • add

        public JMenuItem add​(String s)
        创建一个带有指定文本的新菜单项,并将其附加到此菜单的末尾。
        参数
        s - 要添加的菜单项的字符串
        结果
        一个新的 JMenuItem创建使用 s
      • add

        public JMenuItem add​(Action a)
        在菜单的末尾附加一个新菜单项,该菜单将分派指定的 Action对象。
        参数
        a - 要添加到菜单中的 Action
        结果
        新的菜单项
        另请参见:
        Action
      • createActionComponent

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

        protected PropertyChangeListener createActionChangeListener​(JMenuItem b)
        返回正确配置的 PropertyChangeListener ,更新控件,因为发生 Action更改。
        参数
        b - 为其创建侦听器的菜单项
        结果
        一个正确配置的 PropertyChangeListener
      • setLightWeightPopupEnabled

        @BeanProperty(bound=false,
                      expert=true,
                      description="Determines whether lightweight popups are used when possible")
        public void setLightWeightPopupEnabled​(boolean aFlag)
        设置lightWeightPopupEnabled属性的值,默认值为true 默认情况下,当外观显示弹出窗口时,可以选择使用轻量级(全Java)弹出窗口。 轻量级弹出窗口比重量级(本机对等体)窗口更有效,但轻量级和重量级组件在GUI中不能很好地混合。 如果您的应用程序混合轻量级和重量级组件,则应禁用轻量级弹出窗口。 一些看起来和感觉可能总是使用重量级的弹出窗口,无论这个属性的价值。
        参数
        aFlag - false以禁用轻量级弹出窗口
        另请参见:
        isLightWeightPopupEnabled()
      • isLightWeightPopupEnabled

        public boolean isLightWeightPopupEnabled​()
        获取 lightWeightPopupEnabled属性。
        结果
        的价值 lightWeightPopupEnabled属性
        另请参见:
        setLightWeightPopupEnabled(boolean)
      • getLabel

        public String getLabel​()
        返回弹出菜单的标签
        结果
        一个包含弹出菜单标签的字符串
        另请参见:
        setLabel(java.lang.String)
      • setLabel

        @BeanProperty(description="The label for the popup menu.")
        public void setLabel​(String label)
        设置弹出菜单的标签。 不同的外观和感觉可能会选择显示或不显示。
        参数
        label - 指定弹出菜单标签的字符串
        另请参见:
        setLabel(java.lang.String)
      • addSeparator

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

        public void insert​(Action a,
                           int index)
        在给定位置插入指定的 Action对象的菜单项。
        参数
        a - 要插入的 Action对象
        index - 指定要插入的位置 Action ,其中0是第一个
        异常
        IllegalArgumentException - 如果 index <0
        另请参见:
        Action
      • insert

        public void insert​(Component component,
                           int index)
        将指定的组件插入到给定位置的菜单中。
        参数
        component - 要插入的 Component
        index - 指定插入组件的位置,其中0是第一个
        异常
        IllegalArgumentException - 如果 index <0
      • addPopupMenuListener

        public void addPopupMenuListener​(PopupMenuListener l)
        添加一个 PopupMenu监听器。
        参数
        l - 要添加的 PopupMenuListener
      • removePopupMenuListener

        public void removePopupMenuListener​(PopupMenuListener l)
        删除一个 PopupMenu监听器。
        参数
        l - 要删除的 PopupMenuListener
      • getPopupMenuListeners

        @BeanProperty(bound=false)
        public PopupMenuListener[] getPopupMenuListeners​()
        返回使用addPopupMenuListener()添加到此JMenuItem的所有 PopupMenuListener的数组。
        结果
        添加了所有 PopupMenuListener s,如果没有添加任何侦听器,则添加一个空数组
        从以下版本开始:
        1.4
      • addMenuKeyListener

        public void addMenuKeyListener​(MenuKeyListener l)
        在弹出菜单中添加一个 MenuKeyListener
        参数
        l - 要添加的 MenuKeyListener
        从以下版本开始:
        1.5
      • removeMenuKeyListener

        public void removeMenuKeyListener​(MenuKeyListener l)
        从弹出式菜单中移除 MenuKeyListener
        参数
        l - 要删除的 MenuKeyListener
        从以下版本开始:
        1.5
      • getMenuKeyListeners

        @BeanProperty(bound=false)
        public MenuKeyListener[] getMenuKeyListeners​()
        返回使用addMenuKeyListener()添加到此JPopupMenu的所有 MenuKeyListener的数组。
        结果
        如果没有添加任何监听器,则添加所有 MenuKeyListener s或一个空数组
        从以下版本开始:
        1.5
      • firePopupMenuWillBecomeVisible

        protected void firePopupMenuWillBecomeVisible​()
        通知 PopupMenuListener s这个弹出菜单将变得可见。
      • firePopupMenuWillBecomeInvisible

        protected void firePopupMenuWillBecomeInvisible​()
        通知 PopupMenuListener s这个弹出菜单将变得不可见。
      • firePopupMenuCanceled

        protected void firePopupMenuCanceled​()
        通知 PopupMenuListeners该弹出菜单被取消。
      • pack

        public void pack​()
        放出容器,使其使用显示其内容所需的最小空间。
      • isVisible

        public boolean isVisible​()
        如果弹出菜单可见(正在显示),则返回true。
        重写:
        isVisibleComponent
        结果
        true如果组件是可见的, false否则
        另请参见:
        Component.setVisible(boolean)
      • setLocation

        @BeanProperty(description="The location of the popup menu.")
        public void setLocation​(int x,
                                int y)
        使用x,y坐标设置弹出菜单左上角的位置。

        该方法更改几何相关数据。 因此,本机窗口系统可以忽略这样的请求,或者它可以修改所请求的数据,使得JPopupMenu对象被放置并且以与桌面设置紧密对应的方式被JPopupMenu

        重写:
        setLocationComponent
        参数
        x - 弹出窗口在坐标空间中的新位置的x坐标
        y - 弹出窗口在坐标空间中的新位置的y坐标
        另请参见:
        Component.getLocation()Component.setBounds(int, int, int, int)Component.invalidate()
      • getInvoker

        public Component getInvoker​()
        返回该弹出菜单的“调用者”组件。
        结果
        其中显示弹出菜单的 Component
      • setInvoker

        @BeanProperty(bound=false,
                      expert=true,
                      description="The invoking component for the popup menu")
        public void setInvoker​(Component invoker)
        设置此弹出菜单的调用者 - 要显示弹出菜单菜单的组件。
        参数
        invoker - 其中显示弹出菜单的 Component
      • show

        public void show​(Component invoker,
                         int x,
                         int y)
        在组件调用者的坐标空间中的位置x,y处显示弹出式菜单。
        参数
        invoker - 弹出菜单要显示的空间中的组件
        x - 要显示弹出菜单的调用者坐标空间中的x坐标
        y - 要显示弹出菜单的调用者坐标空间中的y坐标
      • getComponentAtIndex

        @Deprecated
        public Component getComponentAtIndex​(int i)
        已过时。 替换为Container.getComponent(int)
        返回指定索引处的组件。
        参数
        i - 组件的索引,其中0是第一个
        结果
        该指数为 Component
      • getComponentIndex

        public int getComponentIndex​(Component c)
        返回指定组件的索引。
        参数
        c - 要查找的 Component
        结果
        组件的索引,其中0是第一个; 如果未找到组件,则为-1
      • setPopupSize

        @BeanProperty(description="The size of the popup menu")
        public void setPopupSize​(Dimension d)
        使用Dimension对象设置弹出窗口的大小。 这相当于setPreferredSize(d)
        参数
        d - 指定此组件的新大小的 Dimension
      • setPopupSize

        @BeanProperty(description="The size of the popup menu")
        public void setPopupSize​(int width,
                                 int height)
        将Popup窗口的大小设置为指定的宽度和高度。 这相当于setPreferredSize(new Dimension(width, height))
        参数
        width - 弹出 width的新宽度(以像素为单位)
        height - 弹出 height的新高度,以像素为单位
      • setSelected

        @BeanProperty(expert=true,
                      hidden=true,
                      description="The selected component on the popup menu")
        public void setSelected​(Component sel)
        设置当前选择的组件,这将导致选择模型的更改。
        参数
        sel - 要选择的 Component
      • isBorderPainted

        public boolean isBorderPainted​()
        检查边框是否应该涂漆。
        结果
        如果边框被绘画,则为true,否则为false
        另请参见:
        setBorderPainted(boolean)
      • setBorderPainted

        @BeanProperty(bound=false,
                      description="Is the border of the popup menu painted")
        public void setBorderPainted​(boolean b)
        设置是否应绘制边框。
        参数
        b - 如果为true,则绘制边框。
        另请参见:
        isBorderPainted()
      • getMargin

        @BeanProperty(bound=false)
        public Insets getMargin​()
        返回弹出菜单的边框和容器之间的边距(以像素为单位)。
        结果
        一个包含边距值的 Insets对象。
      • paramString

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

        @BeanProperty(bound=false)
        public AccessibleContext getAccessibleContext​()
        获取与此JPopupMenu关联的AccessibleContext。 对于JPopupMenus,AccessibleContext采用AccessibleJPopupMenu的形式。 如有必要,将创建一个新的AccessibleJPopupMenu实例。
        Specified by:
        getAccessibleContext在接口 Accessible
        重写:
        getAccessibleContextComponent
        结果
        一个AccessibleJPopupMenu作为这个JPopupMenu的AccessibleContext
      • processKeyEvent

        public void processKeyEvent​(KeyEvent e,
                                    MenuElement[] path,
                                    MenuSelectionManager manager)
        处理从MenuSelectionManager转发的密钥事件,并根据需要更改菜单选择,使用MenuSelectionManager的API。

        注意:您不必将事件转发到子组件。 这是由MenuSelectionManager自动完成的。

        Specified by:
        processKeyEvent在接口 MenuElement
        参数
        e - a KeyEvent
        path - MenuElement路径数组
        manager - MenuSelectionManager
      • menuSelectionChanged

        public void menuSelectionChanged​(boolean isIncluded)
        当菜单选择更改以激活或停用此菜单时发生消息。 这实现了javax.swing.MenuElement接口。 覆盖MenuElement.menuSelectionChanged
        Specified by:
        menuSelectionChanged在接口 MenuElement
        参数
        isIncluded - 如果此菜单处于活动状态, isIncluded true,否则为false
        另请参见:
        MenuElement.menuSelectionChanged(boolean)
      • getSubElements

        @BeanProperty(bound=false)
        public MenuElement[] getSubElements​()
        返回一个MenuElement的数组, MenuElement包含此菜单组件的子菜单。 它将只返回符合JMenuElement接口的JMenuElement 如果弹出菜单是null返回一个空数组。 该方法需要符合MenuElement接口。
        Specified by:
        getSubElements在接口 MenuElement
        结果
        一个 MenuElement对象的数组
        另请参见:
        MenuElement.getSubElements()
      • isPopupTrigger

        public boolean isPopupTrigger​(MouseEvent e)
        如果 MouseEventJPopupMenu当前安装的UI视为弹出式触发器,则返回true。
        参数
        e - a MouseEvent
        结果
        如果鼠标事件是弹出式触发器,则为true
        从以下版本开始:
        1.3