Verwenden
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()
wird nicht funktionieren. Es ist falsch für das Mac-Strg-Klick-Beispiel implementiert, weil es überprüft, ob e.getModifiers() & 0x4
nicht Null ist. Aber das Flag für "Befehl" ist auch 0x4
.
So wird es Cmd-Klick als Rechtsklick melden, aber nicht Ctrl-Klick als eins melden. Schlimmer noch, cmd-click gibt auch true
an SwingUtilities.isLeftMouseButton()
zurück. Wenn Ihr Code so geschrieben ist, dass er mit der linken Maustaste klickt und mit der rechten Maustaste klickt und Sie eine zweite if
anstelle einer else if
verwenden, ist eine böse Überraschung, wenn beide ausgeführt werden.
Für diejenigen, die interessiert sind, sind dies die vollständigen getModifiers()
und getModifiersEx()
Werte für Single-Modifikator Klicks.
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
Vielen Dank für Ihre Hilfe, wirklich hat es viel geholfen. –
FYI Um einen echten Rechtsklick auf einen Mac zu generieren, klicken Sie mit zwei Fingern auf das Trackpad. – nslntmnx
Ich denke, du meintest MouseEvent.BUTTON3 - MouseButton ist etwas anderes. (http://docs.oracle.com/javase/7/docs/api/java/awt/event/MouseEvent.html, https://docs.oracle.com/javafx/2/api/javafx/scene/input) /MouseButton.html) – shieldgenerator7