【发布时间】:2013-04-23 18:25:48
【问题描述】:
所以我必须在 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的方式吗?
【问题讨论】: