2010-06-04 5 views
6

Для окон и linux я могу обнаружить щелчок правой кнопкой мыши. Но для mac я не знаю, как обнаружить щелчок правой кнопкой мыши.Как обнаружить событие щелчка правой кнопкой мыши для Mac OS

Как написать программу Java для обнаружения правой кнопкой мыши для Mac OS

Благодаря Сунил Кумар Sahoo

ответ

7

Это то же самое, как обнаружение правой кнопкой мыши на Windows, или Linux-вы называете данный getButton() метод MouseEvent в чтобы проверить, было ли нажато 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.

+0

Благодарим за помощь. На самом деле это помогло. –

+0

FYI Чтобы создать истинный щелчок правой кнопкой мыши на Mac, нажмите двумя пальцами на трекпад. – nslntmnx

+0

Я думаю, вы имели в виду MouseEvent.BUTTON3 - MouseButton - это что-то еще. (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

Вместо использования MouseEvent.BUTTON3, bettter самостоятельно docummenting подход заключается в использовании

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

Кроме того, если вы используете этот код, чтобы отобразить всплывающее меню, то вы не должны использовать этот подход, поскольку каждый ОС имеет разные нажатия клавиш для всплывающего меню. Прочтите раздел из учебника Swing по телефону Bringing Up a Popup Menu.

2

Необходимо добавить поддержку управления щелчком мыши, так как пользователи Mac могут не использовать мышь со второй кнопкой - например. Трекпад не имеет правой кнопки мыши.

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

Использование

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-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 
Смежные вопросы