【问题标题】:Determine wether the middle mouse button is pressed but not the alt key判断是否按下了鼠标中键而不是alt键
【发布时间】:2012-11-16 09:01:52
【问题描述】:

我尝试了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”

提前谢谢你

【问题讨论】:

  • 顺便说一下,Alt 键在 UNIX 系统上有一些特殊的行为,所以不应该在没有 Ctrl 或 Shift 作为修饰键的情况下使用它。

标签: java mouseevent modifier alt-key


【解决方案1】:

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

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

@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 似乎支持双击,但也处理单击。

【讨论】:

    猜你喜欢
    • 2015-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多