Java 如何检测Mac OS的右击事件
对于windows和linux,我能够检测右键单击。但对于mac,我不知道如何检测右键点击 如何编写java程序来检测Mac OS的右键点击 谢谢Java 如何检测Mac OS的右击事件,java,macos,Java,Macos,对于windows和linux,我能够检测右键单击。但对于mac,我不知道如何检测右键点击 如何编写java程序来检测Mac OS的右键点击 谢谢 Sunil KUmar Sahoo这与在Windows或Linux上检测右键单击相同,您可以调用给定MouseeEvent的getButton()方法来检查是否单击了BUTTON3。例如,请查看以下MouseListener示例片段: public class MyListener implements MouseListener { //
Sunil KUmar Sahoo这与在Windows或Linux上检测右键单击相同,您可以调用给定MouseeEvent的
getButton()
方法来检查是否单击了BUTTON3
。例如,请查看以下MouseListener示例片段:
public class MyListener implements MouseListener
{
// ... code ...
public void mouseClicked(MouseEvent event)
{
if (event.getButton() == MouseButton.BUTTON3)
{
// Right-click happened
}
}
}
然而,如果用户实际上有一个两个按钮的鼠标,这只会检测到右击。由于大多数MAC鼠标在不久前只有一个按钮,所以您可能需要考虑检测控制点击(这是当时右键单击的常见习惯用法)。如果您决定这样做,那么实现是非常简单的:只需添加另一个检查,检查
事件。isControlDown()
是否返回true。而不是使用MouseEvent.BUTTON3,更好的自文档化方法是使用
if (SwingUtilities.isRightMouseButton(event))
// do something
此外,如果您使用此代码显示弹出菜单,则不应使用此方法,因为每个操作系统都有不同的按键来输入弹出菜单。阅读Swing教程中的部分。需要添加控件单击支持,因为Mac用户可能没有使用带有第二个按钮的鼠标-例如,轨迹板没有鼠标右键
@Override
public void mouseClicked(MouseEvent e) {
// Mac often uses control-click - isControlDown()
if (SwingUtilities.isRightMouseButton(e) || e.isControlDown()) {
// do something
使用
SwingUtilities.isRightMouseButton()
将不起作用。对于Mac ctrl click示例,它的实现不正确,因为它检查e.getModifiers()&0x4
是否为非零。但用于“命令”的标志也是0x4
因此,它会将cmd click报告为右键单击,但不会将ctrl click报告为右键单击。更糟糕的是,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
谢谢你的帮助,真的很有帮助。仅供参考,在Mac上生成真正的右键单击,用两个手指在触摸板上单击。我想你指的是MouseEvent.BUTTON3--MouseButton是另一回事。(, )
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