2010-06-04 13 views

Respuesta

7

Es la misma que la detección de un clic derecho en Windows o Linux que llame a su determinado método de MouseEvent getButton() para verificar si se hizo clic en BUTTON3. Por ejemplo, echar un vistazo al siguiente fragmento de un ejemplo MouseListener:

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

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

Sin embargo, esto sólo se detecta el clic derecho si el usuario realmente tiene un ratón de dos botones. Dado que la mayoría de los ratones Mac solo tenían un botón desde hace poco tiempo, es posible que desee considerar la detección de clics de control también (que era la expresión común para hacer clic derecho en ese momento). Si decide hacerlo, la implementación es bastante trivial: simplemente agregue otro cheque para ver si event.isControlDown() devuelve verdadero.

+0

Gracias por su ayuda, Realmente me ayudó mucho. –

+0

FYI Para generar un verdadero clic derecho en una Mac, haga doble clic en el trackpad. – nslntmnx

+0

Creo que se refería a MouseEvent.BUTTON3 - MouseButton es otra cosa. (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

En lugar de utilizar MouseEvent.BUTTON3, un enfoque de auto docummenting bettter es utilizar

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

Además, si usted está usando este código para mostrar un menú emergente, entonces no debe utilizar este método ya que cada El sistema operativo tiene diferentes teclas para invocar el menú emergente. Lea la sección del tutorial de Swing en Bringing Up a Popup Menu.

2

Se debe agregar la compatibilidad con control y clic ya que los usuarios de Mac podrían no estar utilizando un mouse con el segundo botón, p. Un trackpad no tiene un botón derecho del mouse.

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

Uso

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() no funcionará. Está implementado incorrectamente para el ejemplo de Mac ctrl-click porque comprueba si e.getModifiers() & 0x4 es distinto de cero. Pero la bandera utilizada para "comando" también es 0x4.

Por lo tanto, se informará cmd-clic como un clic derecho, pero no se informará ctrl-clic como uno solo. Peor aún, cmd-click también devolverá true a SwingUtilities.isLeftMouseButton(). Si su código está escrito para manejar los clics izquierdos de una manera y hace clic con el botón derecho sobre otro, y usa un segundo if en lugar de un else if, se llevará una desagradable sorpresa cuando ambos se ejecuten. Para los interesados, estos son los valores getModifiers() y getModifiersEx() completos para clics de un solo modificador.

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 
Cuestiones relacionadas