【问题标题】:JMenuItem-adding event listenerJMenuItem-添加事件监听
【发布时间】:2014-02-06 17:16:33
【问题描述】:

如何处理将JMenuItem (newItem) 添加到JMenu (menuUsers)?是否有合适的ActionListener 用于此目的?有一部分代码执行将菜单项添加到菜单。它在引发某些事件时执行。这里是:

public void UpdateUserList(Map<String, UserSchedule> allSchedule) throws Exception {
    menuUsers.removeAll();
    Iterator it = allSchedule.entrySet().iterator();
    while (it.hasNext()) {
        Map.Entry entry = (Map.Entry) it.next();
        JMenuItem newItem = new JMenuItem(entry.getKey().toString());
        newItem.setName("User");
        menuUsers.add(newItem);
    }
}

我想变成这样(伪代码):

menuUsers.addSomeListener(new SomeListener()
{
    void performWhenNewItemAdded(...) {
      ...
    }
}

【问题讨论】:

    标签: java swing jmenu jmenuitem


    【解决方案1】:

    “如何处理将 JMenuItem (newItem) 添加到菜单 (menuUsers)?”

    对于JmenuItems,我会使用Action 代替。您可以向它们添加图像、文本、工具提示和键绑定。它们也可以被其他组件重用。请参阅this answer 了解几个示例。

    如果可以完成的话,这是一个屏幕截图。你根本不需要任何JMenuItemsActionListeners。只需将Action 添加到JMenu。更多信息请访问How to use Actions


    为了更直接地回答问题...

    “这个 purpes 有合适的 ActionListener 吗?”

    你做错了。您似乎正在尝试将ActionListener 添加到JMenu。而应将ActionListener 添加到JMenuItem。更多信息请访问How to use Menus

    jMenuItem.addActionListener(new ActionListener(){
        @Override
        public void actionPerformed(ActionEvent e) {
            // do  something
        }
    });
    

    如果出于某种原因您确实想为JMenu 添加一个侦听器,而不是JMenuItem,您应该使用MenuListener 来侦听敌人MenuEvents,以下是您可以覆盖的仅有的三种方法。添加JMenuItem时没有方法。

     userMenu.addMenuListener(new MenuListener(){
         @Override
         public void menuCanceled(MenuEvent e) {
             // Invoked when the menu is canceled.
         }
    
         @Override
         public void menuDeselected(MenuEvent e) {
            // Invoked when the menu is deselected.
         }
    
         @Override
         public void menuSelected(MenuEvent e)
            // Invoked when a menu is selected.
         }
     });
    

    【讨论】:

    • 你可能没听懂我的意思。我的意思是我需要事件处理程序,当菜单项被添加到菜单时引发。对不起我的英语
    • 在代码块之前阅读答案的最后一行
    • 但是执行以下语句时没有引发 MenuEvent:menuUser.add(newItem)。当用户对窗口中的菜单进行某种操作时,会引发 MenuEvent。我必须赶上在我的菜单中添加新项目。
    • 谢谢!这就是我所需要的:)
    猜你喜欢
    • 2020-06-13
    • 1970-01-01
    • 2016-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多