对于Windows和Linux,我能够检测到右键单击。但对于Mac我不知道如何检测右键单击。
如何编写java程序来检测Mac OS的右键单击
由于 Sunil KUmar Sahoo
答案 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