Поэтому мне нужно создать простой графический интерфейс в Swing для моего класса Java, и я наткнулся на эту небольшую косметическую проблему.
У меня есть следующий код:
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. Кажется, что Swing видит это по-другому и отправляет событие действия независимо от того, какая кнопка мыши была нажата — в отличие от JButton
, который ничего не сработает, пока не будет нажата первая кнопка мыши.
Теперь я мог бы жить с этим, так как я могу легко поймать кнопку мыши 1 и выполнить свои действия, но как насчет того, чтобы поймать использование акселератора? Он вызовет событие действия, но я не вижу возможности его перехватить, поскольку он возвращает «0» в качестве модификатора (так же, как и любые другие кнопки мыши, кроме 1, 2 и 3).
Могу ли я каким-либо образом сказать JMenuItem
, что он должен реагировать только на первую кнопку мыши и ее акселератор? Похоже на то, как это делает JButton
?