Java: JMenuItem не работает с ActionMap/AbstractAction

Общий код...

По какой-то причине мой JMenuItem не выполняет действия.

Сделал рамку, JMenuBar и JMenuItem, все на своих местах. Я могу просто щелкнуть JMenuItem, он правильно выделяет и закрывает меню, но никаких действий не выполняется.

Я добавил ключ к ActionMap с именем JMenuItems. Я также добавил ключ на карту ввода с точно таким же именем, и он отлично срабатывает.

    'menuitem'.setActionMap(getActionMap());
    System.out.println('menuitemname'.getActionMap().size());
    System.out.println('menuitemname'.getActionCommand());

возвращает 1 и правильную клавишу действия соответственно. Щелчок по пункту меню ничего не дает. Есть что-то, что мне не хватает?


person Jeremy    schedule 04.12.2011    source источник
comment
ActionMap/InputMap используются для привязки клавиш, а не для щелчков мышью.   -  person camickr    schedule 05.12.2011


Ответы (1)


Вероятно, вы ищете метод setAction() (а может быть, и setActionCommand()).

person user268396    schedule 04.12.2011
comment
Нет, setActionCommand установит то, что возвращается с помощью getActionCommand (очевидно). Если вы посмотрите на предоставленный код, getActionCommand возвращает правильную клавишу действия. Я так понимаю, setActionCommand ничего не делает? Я предполагал, что setActionCommand сделает так, что нажатие пункта меню вызовет соответствующее действие для его карты действий... - person Jeremy; 05.12.2011
comment
@kleopatra: setActionCommand() полезен, когда у вас есть собственный ActionListener, который отвечает за обработку ActionEvent. В этом случае можно использовать setActionCommand() и делегировать соответствующую реализацию actionPerformed() набору объектов для действия в ActionMap компонента (например). Точно так же это полезно, если вы хотите отлаживать код: таким образом вы можете идентифицировать свои события действия по их команде. - person user268396; 05.12.2011
comment
если вам нужна actionCommand по каким-либо причинам, установите ее значение для действия, а не для кнопки. И никогда не используйте ActionListener, всегда стремитесь к самой высокой доступной абстракции. - person kleopatra; 05.12.2011