所以我必须在 Swing 中为我的 Java 类创建一个简单的 GUI,我偶然发现了这个小问题。
我有以下代码:
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 单击它,否则触发任何东西。
现在我可以忍受这一点,因为我可以轻松地抓住鼠标按钮 1 并执行我的操作,但是如何抓住加速器的使用情况呢?它将触发动作事件,但我看不到任何捕捉它的可能性,因为它返回“0”作为修饰符(与除 1、2 和 3 之外的任何其他鼠标按钮相同)。
有什么方法可以告诉我JMenuItem
它应该只对鼠标按钮 1 和它的加速器做出反应?类似的方式JButton
吗?