2014-02-06 117 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

相關問題