2014-02-06 71 views
0

如何处理将JMenuItemnewItem)添加到JMenumenuUsers)?是否有适合此目的的ActionListener?有一部分代码将菜单项添加到菜单中。它在某些事件发生时执行。那就是:JMenuItem-adding event listener

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(...) { 
     ... 
    } 
} 

回答

2

“我该如何处理添加的JMenuItem(的newitem)的菜单(menuUsers) ?”

对于JmenuItems我会使用Action istead。您可以添加图像,文本,工具提示和键绑定到它们。他们也可以被其他组件重复使用。有几个例子见this answer

这是截图,如果可以完成。根本不需要任何JMenuItemsActionListener。只需将Action添加到JMenu即可。多见于How to use Actions

enter image description here


更直接地回答这个问题......

“是否有此purpes适当的ActionListener?”

你做错了。您似乎试图将ActionListener添加到JMenu。相反ActionListener应该被添加到JMenuItem。多见于How to use Menus

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

如果由于某种原因,你没有要一个监听器添加到JMenuJMenuItem,你应该使用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. 
    } 
}); 

+0

你可能不理解我。我的意思是我需要处理事件,当menuitems被添加到菜单时引发。对不起,我的英语 – oler117

+0

在代码块 –

+0

之前阅读答案的最后一行,但执行以下语句时不会引发MenuEvent:menuUser.add(newItem)。当用户使用窗口中的菜单进行排序时,会引发MenuEvent。我必须赶上添加新的项目到我的菜单。 – oler117

相关问题