如何检测Mac OS的右键单击事件

时间:2010-06-04 08:22:24

标签: java macos

对于Windows和Linux,我能够检测到右键单击。但对于Mac我不知道如何检测右键单击。

如何编写java程序来检测Mac OS的右键单击

由于 Sunil KUmar Sahoo

4 个答案:

答案 0 :(得分:15)

不使用MouseEvent.BUTTON3,而是使用更好的自我管理方法

if (SwingUtilities.isRightMouseButton(event))
   // do something

此外,如果您使用此代码显示弹出菜单,那么您不应该使用此方法,因为每个操作系统都有不同的击键来启动弹出菜单。阅读Bringing Up a Popup Menu上的Swing教程中的部分。

答案 1 :(得分:7)

与检测右键单击Windows或Linux相同 - 您调用给定的MouseEvent的getButton()方法来检查是否单击了BUTTON3。例如,看一下示例MouseListener的以下片段:

public class MyListener implements MouseListener
{
    // ... code ...

    public void mouseClicked(MouseEvent event)
    {
        if (event.getButton() == MouseButton.BUTTON3)
        {
            // Right-click happened
        }
    }
}

但是,如果用户实际上有一个双键鼠标,则只会检测到右键单击。由于大多数Mac鼠标在不久之前只有一个按钮,因此您可能还需要考虑检测控制点击(这是当时右键单击的常用习惯用法)。如果您决定这样做,那么实现非常简单:只需添加另一个检查,如果event.isControlDown()返回true。

答案 2 :(得分:2)

需要添加

控制点击支持,因为Mac用户可能没有使用带有第二个按钮的鼠标 - 例如触控板没有鼠标右键。

@Override
public void mouseClicked(MouseEvent e) {
   // Mac often uses control-click - isControlDown()
   if (SwingUtilities.isRightMouseButton(e) || e.isControlDown()) {
      // do something

答案 3 :(得分:2)

使用

private static boolean isRightClick(MouseEvent e) {
    return (e.getButton()==MouseEvent.BUTTON3 ||
            (System.getProperty("os.name").contains("Mac OS X") &&
                    (e.getModifiers() & InputEvent.BUTTON1_MASK) != 0 &&
                    (e.getModifiers() & InputEvent.CTRL_MASK) != 0));
}

SwingUtilities.isRightMouseButton()无效。 Mac ctrl-click示例的实现不正确,因为它会检查e.getModifiers() & 0x4是否为非零。但用于"命令"的标志;也是0x4

因此,它会报告cmd-click为右键单击但不会报告按住Ctrl键单击。更糟糕的是,cmd-click也会将true返回SwingUtilities.isLeftMouseButton()。如果您的代码是为了处理单向左键单击并右键单击另一个代码而使用第二个if而不是else if而编写代码,那么当您执行这两个代码时,您会遇到令人讨厌的惊喜

对于有兴趣的人,这些是单修改器点击的完整getModifiers()getModifiersEx()值。

Left click: (button 1)
Basic: 0000010000 0000000000    16 0
Shift: 0000010001 0001000000    17 64
Ctrl:  0000010010 0010000000    18 128
Cmd:   0000010100 0100000000    20 256
Opt:   0000011000 1000000000    24 512

Mid click: (button 2)
Basic: 0000001000 1000000000    8 512
Shift: 0000001001 0001000000    9 64
Ctrl:  0000001010 0010000000    10 128
Cmd:   0000001100 0100000000    12 256
Opt:   0000001000 1000000000    8 512

Right click: (button 3)
Basic: 0000000100 0100000000    4 256
Shift: 0000000101 0001000000    5 64
Ctrl:  0000000110 0010000000    6 128
Cmd:   0000010100 0100000000    20 256
Opt:   0000001100 1000000000    12 512