2014-02-06 3 views
0

Как я могу обработать добавление JMenuItem (newItem) к JMenu (menuUsers)? Есть ли для этого ActionListener? Существует часть кода, который выполняет добавление пунктов меню в меню. Он срабатывает, когда возникает какое-то событие. Вот оно:JMenuItem-add event прослушиватель

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 для нескольких примеров.

Вот скриншот, если что можно сделать. Вам не нужны никакие JMenuItems или ActionListener s вообще. Просто добавьте Action в JMenu. Смотри на How to use Actions

enter image description here


Чтобы ответить на этот вопрос более непосредственно ...

"Есть ли правильный ActionListener для этого purpes?"

Вы делаете это неправильно. Кажется, вы пытаетесь добавить 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. 
    } 
}); 

+0

Вы, наверное, меня не понял. Я имел в виду, что мне нужен обработчик события, который поднимается, когда в меню добавляются элементы меню. Извините за мой английский – oler117

+0

Прочитайте последнюю строку ответа перед блоком кода –

+0

Но MenuEvent не возникает, когда выполняется следующая инструкция: menuUser.add (newItem). MenuEvent поднимается, когда пользователь делает что-то с меню в окне. Мне нужно поймать добавление нового элемента в мое меню. – oler117