Определить, нажата ли средняя кнопка мыши, но не клавиша alt

Я экспериментировал с java.awt.event.MouseEvent и кнопки мыши и клавиши-модификаторы. Наконец я пришел к точке, где меня смутило его поведение.

Обычно я использую SwingUtilities.isLeftMouseButton(...) и т.д., чтобы определить, какая кнопка мыши нажата и <MouseEvent>.isControlDown() и т.д., чтобы определить, какая клавиша-модификатор нажата.

Но если я нажму среднюю кнопку мыши, <MouseEvent>.isAltDown()-метод, кажется, всегда верен, независимо от того, нажата ли клавиша Alt или нет (кстати, одинаково для правой кнопки мыши и мета-клавиши).

Кажется, что некоторые клавиши на клавиатуре имеют те же флаги событий, что и некоторые кнопки мыши. Как получить среднюю кнопку мыши в Java? кажется, чтобы подтвердить мое предположение.

Итак, мой вопрос: есть ли способ определить, какая кнопка мыши нажата, а какие модификаторы действительно нажаты? Или лучше использовать только клавиши-модификаторы Ctrl и Shift для условных событий мыши?

ОС: Windows 8, Java-версия "1.7.0_09"

заранее спасибо

1 ответ

Что касается вашей проблемы со средней кнопкой мыши... http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6495530, может показаться, что Sun/Oracle знает об этой проблеме с 2006 года...

Для других случаев (хотя бы простых) я делаю следующее.

@Override
public void mouseClicked(MouseEvent e) {
     if (e.getClickCount() == 1 && e.getButton() == MouseEvent.BUTTON2){
         //Do some stuff...
         if (e.isControlDown()) {
             //Do something if control is down
         }else{
             //Something different if it is not down.
         }
     }
}

Есть аналогичный помощник для alt (который не работает со средней кнопкой, это всегда true), shift и meta (это клавиша OS X?).

Я заметил странное поведение, если вы хотите обрабатывать двойные щелчки и отдельные щелчки отдельно, поскольку Java, кажется, учитывает двойной щелчок, но обрабатывает и один щелчок.

Другие вопросы по тегам