2010-06-04 5 views

Antwort

7

Es ist das gleiche wie ein Rechtsklick auf Windows oder zum Nachweis von Linux-Sie Ihre gegebenen Mouse nennen getButton() Methode um zu prüfen, ob BUTTON3 angeklickt wurde. Nehmen wir zum Beispiel einen Blick auf die folgenden Ausschnitt eines Beispiels Mouselistener:

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

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

Dies ist jedoch erkennt nur Rechtsklick, wenn der Benutzer tatsächlich eine Maus mit zwei Tasten hat. Da die meisten Mac-Mäuse vor nicht allzu langer Zeit nur einen Knopf hatten, sollten Sie vielleicht auch Kontroll-Klicks in Erwägung ziehen (was damals die gängige Redewendung war, mit der rechten Maustaste zu klicken). Wenn Sie sich dazu entschließen, ist die Implementierung ziemlich trivial: Fügen Sie einfach einen weiteren Check hinzu, wenn event.isControlDown() den Wert true zurückgibt.

+0

Vielen Dank für Ihre Hilfe, wirklich hat es viel geholfen. –

+0

FYI Um einen echten Rechtsklick auf einen Mac zu generieren, klicken Sie mit zwei Fingern auf das Trackpad. – nslntmnx

+0

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

15

Statt MouseEvent.BUTTON3 zu verwenden, ein bettter Selbst docummenting Ansatz ist

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

auch verwenden, wenn Sie diesen Code verwenden, um ein Popup-Menü anzuzeigen, dann sollten Sie diesen Ansatz nicht verwenden, da jeder OS hat verschiedene Tastenanschläge, um das Popup-Menü zu öffnen. Lesen Sie den Abschnitt aus dem Swing-Tutorial unter Bringing Up a Popup Menu.

2

Control-Klick-Unterstützung muss hinzugefügt werden, da Mac-Benutzer möglicherweise keine Maus mit zweiter Taste verwenden - z. Ein Trackpad hat keine rechte Maustaste.

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

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