Поэтому я должен создать простой графический интерфейс в Swing для моего класса Java, и я наткнулся на эту незначительную косметическую проблему.JMenuItem - как выяснить, активировано ли действие ускорителем?
У меня есть следующий код:
JMenuItem mntmQuit = new JMenuItem("Quit");
mntmQuit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (e.getModifiers() == MouseEvent.BUTTON1_MASK) {
System.out.println("You should fire.");
} else if (e.getModifiers() == MouseEvent.BUTTON2_MASK || e.getModifiers() == MouseEvent.BUTTON3_MASK) {
System.out.println("Why do you fire this event?");
} else {
System.out.println("And how can I catch when the accelerator was used?");
}
}
});
mntmQuit.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, 0));
Я никогда не видел пункт меню, который был вызван, когда правой кнопкой мыши или с помощью любой кнопки мыши, чем кнопки 1. Как кажется Качели видит это по-другому и посылает событие действия независимо от того, какая кнопка мыши была нажата, - в отличие от JButton
, который ничего не загорается, если не щелкнуть мышью. 1.
Теперь я мог бы жить с этим, так как я могу легко поймать кнопку мыши 1 и выполнить мои действия , но как насчет улавливания использования ускорителя? Он запустит событие действия, но я не вижу возможности его поймать, поскольку он возвращает «0» в качестве модификатора (так же, как любые другие кнопки мыши, кроме 1, 2 и 3).
Есть ли способ, которым я могу сообщить JMenuItem
, что он должен реагировать только на кнопку мыши 1 и это ускоритель? Аналогично тому, как JButton
не так ли?
Спасибо за ответ, но я не уверен, правильно ли я это понимаю. Когда я проверяю 'e.getModifiers() == KeyEvent.VK_Q', он не работает, я думаю, что это потому, что' e.getModifiers() 'возвращает' 0' при запуске ускорителя, и это делает его неотличимым от событий, запущенных , скажем, кнопка мыши 4. Редактировать: Извините, пропустили первую строку кода. Мысль об этом также, но тогда проблема будет заключаться в том, что модификатор соответствует любой другой кнопке мыши, чем 1, 2 или 3, а не только ускоритель. – user1728176
@ пользователь1728176 см. Мое редактирование. – Aboutblank