确定是否按下鼠标中键但不是alt键

时间:2012-11-28 13:34:07

标签: java mouseevent modifier alt-key

我尝试了java.awt.event.MouseEvent和鼠标按钮以及修改键。最后我谈到了一个问题,我对它的行为感到困惑。

通常我会使用SwingUtilities.isLeftMouseButton(...)等来检测,按下哪个鼠标按钮以及<MouseEvent>.isControlDown()等来检测,按下了哪个修改键。

但是,如果我按下鼠标中键,<MouseEvent>.isAltDown() - 方法似乎总是正确的,无论是否按下Alt键(对于鼠标右键和元键,方式相同)。

键盘上的某些键似乎与某些鼠标按键共享相同的事件标志。 How to fetch the middle mouse button in java?似乎证实了我的假设。

所以我的问题:有没有办法检测哪个鼠标按键被按下以及哪些修饰符被按下了?或者仅使用Ctrl和Shift修饰键进行条件鼠标事件会更好吗?

操作系统:Windows 8,java版“1.7.0_09”

提前谢谢

1 个答案:

答案 0 :(得分:0)

关于您使用鼠标中键的问题... http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6495530,自2006年以来,Sun / Oracle似乎已经知道此问题...

对于其他情况(至少是简单的情况),我会执行以下操作。

@Override
public void mouseClicked(MouseEvent e) {
     if (e.getClickCount() == 1 && e.getButton() == MouseEvent.BUTTON2){
         //Do some stuff...
         if (e.isControlDown()) {
             //Do something if control is down
         }else{
             //Something different if it is not down.
         }
     }
}

对于alt有一个类似的帮助(它不适用于中间按钮,它总是正确),shift和meta(是OS X键吗?)。

如果您想要处理双击,并且单独单击一下,我注意到奇怪的行为,因为Java似乎遵循双击,但也处理单击。