【问题标题】:How to add submenu to MenuItem如何将子菜单添加到 MenuItem
【发布时间】:2015-07-02 00:55:50
【问题描述】:

我正在尝试将子菜单添加到系统托盘的弹出菜单中的MenuItem。有什么办法可以做到这一点?我找到了一些关于子菜单的解决方案,但它们使用JMenuItem,而TrayIcon 只接受PopupMenu,它只接受MenuItems。

尝试通过MenuItem 实现这一目标:

【问题讨论】:

    标签: java swing popup awt system-tray


    【解决方案1】:

    一个JMenuItem不支持子菜单,你需要使用另一个JMenu(加你JPopupMenu)。详情请见How to Use Menus

    例如...

    JPopupMenu popupMenu = new JPopupMenu();
    
    JMenu deviceMenu = new JMenu("Add Device");
    deviceMenu.add(new JMenuItem("Add More..."));
    
    popupMenu.add(deviceMenu);
    popupMenu.add(new JMenuItem("Delete Device"));
    popupMenu.add(new JMenuItem("Fire"));
    popupMenu.add(new JMenuItem("Fault"));
    popupMenu.add(new JMenuItem("Supress"));
    

    (显然,您仍然需要为所有这些添加插件功能)

    并且 TrayIcon 只接受 PopupMenu,它只接受 MenuItems。

    有个窍门,你要骗一点,看看How do I get a PopupMenu to show up when I left-click on a TrayIcon in Java?的例子

    【讨论】:

    • 嗨。我知道我已经接受了这个答案,但我有一个问题。出现菜单,但是当我将鼠标悬停在菜单项上时菜单项不会突出显示,当我单击菜单项时菜单也不会消失。你有什么想法吗?
    • 从记忆中,菜单突出显示对我来说没问题,但我必须对其进行测试。您可能需要手动强制关闭弹出菜单,因为它并没有真正附加到任何东西......
    • 我已经在监听器末尾添加了popup.showVisible(false),但我不知道如何处理鼠标点击
    • 我通过在菜单上放置“关闭”选项来“破解”解决方案。问题是,您没有可以检测“焦点丢失”的上下文
    【解决方案2】:

    当然,您只需在PopupMenu 中添加一个名为“Add Device”的MenuMenuMenuItem 的子类,因此可以添加)。

    PopupMenu popupMenu = new PopupMenu();
    Menu subMenu = new Menu("Add Device");
    subMenu.add(new MenuItem("Add More .."));
    popupMenu.add(subMenu);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-21
      • 2012-02-23
      • 1970-01-01
      • 1970-01-01
      • 2011-10-25
      相关资源
      最近更新 更多